IE9 javascript eval()的问题

IE9 javascript eval()的问题,javascript,internet-explorer-9,Javascript,Internet Explorer 9,有什么原因吗 eval("(function(x){return x*x;})") 不返回带有IE9的函数?由于解析器错误,IE的eval无法直接计算函数 相反,您应该使用函数构造函数: new Function("x", "return x * x;") 或者,可以将eval'd表达式包装在数组中: eval("[ function(x){return x*x;} ][0]") IE不反对评估包含函数的数组或对象。我只是测试了它并 eval("(function(x){return x*

有什么原因吗

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

不返回带有IE9的函数?

由于解析器错误,IE的
eval
无法直接计算函数

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

new Function("x", "return x * x;")
或者,可以将eval'd表达式包装在数组中:

eval("[ function(x){return x*x;} ][0]")
IE不反对
评估包含函数的数组或对象。

我只是测试了它并

eval("(function(x){return x*x;})")
它返回IE9中的一个函数

eval("(function(x){return x*x;})")
…在IE9的正常模式()下工作正常(但请参见下文)。这并不意味着这是一个好主意(使用
eval
的次数非常少,仅限于避免),但它确实有效

它在Chrome、Firefox和Opera的最新版本中也可以使用(而且应该可以使用)

在“兼容性视图”中,它在IE6、IE7、IE8或IE9中似乎不起作用。这将是一个bug(显然是一个与IE9中更新的JavaScript引擎一起修复的bug),表达式没有任何问题

您可以在早期版本中通过强制解析器认识到它是一个表达式()来修复它:


这是JScript解析器中的一个bug。除非您处于兼容或怪癖模式,否则它不应该发生在IE9中

IE8将函数表达式误解为函数声明,导致它无法返回任何内容。前面提到的

您可以使用另一种典型的方法来解决这个问题,在表达式和语句的构成上取消使用JScript解析器,例如:

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

你确定吗?它不在IE8中。如果在地址栏中粘贴
javascript:typeof eval((函数(x){return x*x;})”)
,您会看到什么?(我没有IE9)它在IE9模式下工作。。。我忘了放html5 doctype行,所以它是在非标准模式下工作的。你能不能引用这些安全原因或任何其他描述这种行为的microsoft来源。@Raynos:我不知道。我想不出任何有效的安全原因来解释这个行为,但我也想不出任何其他原因。那你为什么称它为“安全原因”而不是bug呢?对于IE9和IE10P2(我相信你已经测试过IE8)来说,这也是值得确认的@Raynos:对于一个bug来说,这是非常一致的;这感觉像是一个安全补丁。编辑:我收回这句话。这不是安全功能;您可以毫无问题地返回函数实例,例如使用
eval('[Function(x){return x*x;}][0]')
。这是解析器级故障。IE9是否处于兼容模式?(IE8/IE7/怪癖)。试着用IE9标准运行它。顺便说一句,人们已经提到eval是邪恶的。。让我再次提醒您,
eval
是一个魔鬼。我们的相关问题意味着问题不限于eval。也许值得一提。@Raynos:LOL!这正是我在最近(也是最后一次)编辑中所做的。至少要做对。(你不需要开头和结尾的括号)@Raynos:伟大的头脑,这不是盗取想法。为了清楚起见,我更喜欢那里的括号。
eval('[function(x){return x*x;}][0]')
eval('0?0:function(x){return x*x;}')