<>定义和用法
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语句对字符串进行解析和计算。