Eval

eval()的作用

把字符串参数解析成 JS 代码并运行,并返回执行的结果; 例如:

1
2
eval("2+3"); //执行加运算,并返回运算值。
eval("varage=10"); //声明一个 age 变量

eval 的作用域在它所有的范围内容有效

示例 1:

1
2
3
4
5
6
function a() {
eval("var x=1"); // 等效于 var x=1;
console.log(x);
}
a(); // 输出 1
console.log(x); // 错误 x 没有定义

示例 2:

1
2
3
4
5
6
function a() {
window.eval("var x=1"); // 等效于 window.x=1; 定义了全局变量
console.log(x);
}
a(); // 输出 1
console.log(x); // 输出 1

注意事项

应该避免使用 eval,不安全,非常耗性能(2 次,一次解析成 js 语句,一次执行)
在 IE8 及 IE8 一下的版本就不支持了

其他方法解决

1
2
3
4
5
6
7
8
9
/**
* 字符串表达式计算
* @expression {String} 字符串表达式
* 例:evil("2+3") // 5
*/
function evil(expression) {
const Fn = Function;
return new Fn("return " + expression)();
}

其它作用

由 JSON 字符串转换为 JSON 对象的时候可以用 eval(不推荐使用)

例如:

1
2
3
var json = "{name:'Mr.CAO',age:30}";
var jsonObj = eval("(" + json + ")");
console.log(jsonObj);