Internet Explorer 9是否会在数组和对象文字的末尾阻塞额外的逗号?

use*_*486 24 javascript internet-explorer-9

像Node.js这样的现代浏览器和环境允许你说{a:1,b:2,}或[1,2,3,].这在历史上一直是Internet Explorer的问题.这是在Internet Explorer 9中修复的吗?

T.J*_*der 32

这有两个不同的答案,一个用于对象初始化器中的悬空逗号,另一个用于数组初始化器中的悬空逗号:

对于对象初始值设定项,例如:

var obj = {
    a: 1,
    b: 2,
    c: 3,
};
Run Code Online (Sandbox Code Playgroud)

它已在IE8及更高版本中修复.在此测试:http://jsbin.com/UXuHopeC/1(来源).IE7和更早版本将}在悬空逗号后抛出语法错误.

对于数组初始值设定项,例如:

var arr = [
    1,
    2,
    3,
];
Run Code Online (Sandbox Code Playgroud)

它在IE9及以上版本中"固定" .在此测试:http://jsbin.com/UXuHopeC/2(来源).IE8和更早版本将为该数组提供四个条目,最后一个具有该值undefined.IE9及以上版本给它三个条目.

我把"修复"放在引号中,因为规范最初不清楚数组是否应该有最终undefined条目,所以这两种行为都不正确.只是IE走了一条路而其他人都去了另一条路.:-)

  • 客户刚刚提交了错误,说它在“IE 9 更新 9.0.23”中很好,但在“IE 9 更新 9.0.30”中中断,这可能是几乎立即修复的回归。我正在尝试使用该特定版本来证明这一点,但该报告看起来客户确实进行了尽职调查。 (2认同)

use*_*716 11

本文档声称它将被更正: 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不支持此扩展.