IE9 javascript eval()的问题

时间:2011-07-24 15:16:03

标签: javascript internet-explorer-9

有什么理由

eval("(function(x){return x*x;})")

不会返回IE9的函数吗?

4 个答案:

答案 0 :(得分:9)

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

IE8将函数表达式误解为函数声明,导致它无法返回任何内容。以前在this question中提到过。

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

eval('[function(x){return x*x;}][0]')
eval('0?0:function(x){return x*x;}')

答案 1 :(得分:5)

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

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

new Function("x", "return x * x;")

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

eval("[ function(x){return x*x;} ][0]")

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

答案 2 :(得分:2)

eval("(function(x){return x*x;})")

...在正常模式下(live proof)在IE9中工作得很好(但见下文)。并不意味着它是一个好主意eval非常极少地使用其他东西而不是要避免的东西),但它确实有效。

在Chrome,Firefox和Opera的最新版本中,它也可以(并且应该工作)。

似乎在“兼容性视图”中的IE6,IE7,IE8或IE9中工作。这将是一个错误(显然是在IE9中使用较新的JavaScript引擎修复了大约一千个错误),表达式没有任何问题。

您可以通过强制解析器实现它是一个表达式(live copy)来修复早期版本:

eval("(0 || function(x){return x*x;})")

答案 3 :(得分:1)

我刚试过它并

eval("(function(x){return x*x;})")

它在IE9中返回一个函数。