Internet Explorer 9 是不是会在数组和对象文字末尾的额外逗号上阻塞?
Posted
技术标签:
【中文标题】Internet Explorer 9 是不是会在数组和对象文字末尾的额外逗号上阻塞?【英文标题】:Does Internet Explorer 9 choke on extra commas at the end of array and object literals?Internet Explorer 9 是否会在数组和对象文字末尾的额外逗号上阻塞? 【发布时间】:2011-06-29 12:39:20 【问题描述】:现代浏览器和 Node.js 等环境允许您使用 a:1, b:2, 或 [1,2,3,]。这在历史上一直是 Internet Explorer 的问题。这在 Internet Explorer 9 中是否已修复?
【问题讨论】:
不确定,但您有什么理由留下尾随,
?
@alex:偶然。相信我。
我知道这对我来说很重要。这么小的东西……
手工编辑代码时,尾随逗号非常好,可以减少添加或删除行时潜在的未来错误。
@alex 另一个原因是如果你想从后端 [ for_each elem in list elem, end]
构造一个 JS 数组。语法是组成的。
【参考方案1】:
对此有两种不同的答案,一种用于对象初始值设定项中的悬空逗号,另一种用于数组初始值设定项中的悬空逗号:
对于对象初始化器,例如:
var obj =
a: 1,
b: 2,
c: 3,
;
在 IE8 及以上版本中已修复。在这里测试它:http://jsbin.com/UXuHopeC/1 (source)。 IE7 及更早版本将在悬空逗号后的 上抛出语法错误。
对于数组初始化器,例如:
var arr = [
1,
2,
3,
];
它已在 IE9 及更高版本中“修复”。在这里测试它:http://jsbin.com/UXuHopeC/2 (source)。 IE8 和更早版本将给该数组四个 条目,最后一个具有值undefined
。 IE9 及以上版本给它三个条目。
我将“固定”放在引号中,因为规范最初并不清楚数组是否应该有一个最终的 undefined
条目,所以这两种行为都不正确。只是 IE 走的是一条路,其他人走的是另一条路。 :-)
【讨论】:
请注意,有些版本的 IE 会出现这种情况...我刚刚在IE 9 Update 9.0.30
中向我们的软件提交了一个问题,因为对象文字中的尾随逗号。由于我们不再支持 IE 8 及更低版本,因此选择将其保留在其中,因此自责。
@JuanMendes:我不相信任何版本的 IE9 在对象字面量中存在逗号结尾的错误,因为它已在 IE8 中得到修复。
客户刚刚提交了错误,说它在IE 9 Update 9.0.23
中很好,但在IE 9 Update 9.0.30
中中断,这可能是几乎立即修复的回归。我正在尝试使用该特定版本来证明这一点,但该报告看起来客户确实进行了尽职调查。
@JuanMendes:很有趣。
“初始化器”和文字有什么区别?如果我说var a = [1,];
与my_func([1,]);
不同吗?【参考方案2】:
此文档声称它是/将被更正: http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
更正的问题
数组文字中的尾随逗号添加到数组的长度
示例
var len = [1,2,3,].length;
alert(len); //should be 3, IE8 says 4
它没有具体提到对象。只是数组。
编辑:更多信息。从此 PDF 文档:
http://download.microsoft.com/download/8/4/2/8427CF1B-08B3-4557-952D-102E7A8FA64C/[MS-ES3].pdf
...从此页面下载:http://msdn.microsoft.com/en-us/library/ff520996(VS.85).aspx
JScript 5.8 支持将单个尾随逗号作为 ObjectLiteral 中的最后一项出现。 JScript 5.7 不支持此扩展。
【讨论】:
以上是关于Internet Explorer 9 是不是会在数组和对象文字末尾的额外逗号上阻塞?的主要内容,如果未能解决你的问题,请参考以下文章
Internet Explorer 9 无法解析 Angular UI-Router
强制 Internet Explorer 9 使用 IE 9 模式
Internet Explorer 9 - 按比例调整图像大小