JS的eval()方法

定义和用法

eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。

如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句(代码)。

语法

eval(string)

参数:

  • string——必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

说明

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

抛出

如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

如果非法调用 eval(),则抛出 EvalError 异常。

如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。

实例

eval("x=10;y=20;console.log(x*y)"); // 200
console.log(eval("2+2")); // 4
console.log(eval(x+17)); // 27
console.log(eval(18)); // 18
// 相当于直接调用console.log
let msg = "hello world";
eval("console.log(msg)"); // hello world
// 相当于函数声明
eval("function sayHi() { console.log('hi'); }");

const obj = {
  a: {
    b: {
      c: 1,
    }
  }
}
function get(str) {
  console.log(eval(str)) // 1,相当于console.log(obj.a.b.c)
}
get('obj.a.b.c')

作用域

function a(){
  eval( "var x=1" )
  console.log(x) // 1
}
a()
console.log(x) // 报错,x is not defined

eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域。这在所有主流浏览器都是如此,但是有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,但是往往实际应用中,需要在局部作用域使用具有全局作用域的此函数,这个时候可以用window.eval()的方式实现:

function a(){
  window.eval( "var x=1" )
  console.log(x) // 1
}
a()
console.log(x) // 1

总结

eval是JS中最强大的方法之一,它就像一个完整的ECMAScript解析器,它会根据ECMAScript语句对字符串进行解析和计算。

你可能感兴趣的:(JavaScript,笔记,javascript,前端)