IE9 javascript eval()的问题

650*_*502 12 javascript internet-explorer-9

有什么理由吗?

eval("(function(x){return x*x;})")
Run Code Online (Sandbox Code Playgroud)

没有返回IE9的功能?

bob*_*nce 9

这是JScript解析器中的一个错误.除非您处于兼容性或Quirks模式,否则不应该在IE9中发生.

IE8将函数表达式误解为函数声明,导致它无法返回任何内容.以前在这个问题中提到过.

您可以使用其他一种典型方法来解决它,使JScript解析器不构成表达式与语句的构成,例如:

eval('[function(x){return x*x;}][0]')
eval('0?0:function(x){return x*x;}')
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

由于解析器错误,IE eval无法直接评估函数.

相反,您应该使用Function构造函数:

new Function("x", "return x * x;")
Run Code Online (Sandbox Code Playgroud)

或者,您可以将eval'd表达式包装在一个数组中:

eval("[ function(x){return x*x;} ][0]")
Run Code Online (Sandbox Code Playgroud)

IE不反对eval包含函数的数组或对象.

  • 这不是安全功能; 你可以返回一个没有问题的Function实例,例如`eval('[function(x){return x*x;}] [0]')`.这是一个解析器级别的失败. (2认同)