ECMAScript 规范第三版11.1.4 Array Initialiser 中规定,在以直接量定义数组元素时,在开始、中间和末尾都可以忽略元素,被忽略的元素也会被放入数组中。即:
[,1,,3,].toString()==",1,,3,"
ECMAScript 规范第五版11.1.4 Array Initialiser 中增加了一条规则,若上述被忽略的元素在数组末尾,则该忽略元素将不被放入数组中。即:
[,1,,3,].toString()==",1,,3"
当数组直接量以 ',' 结尾时,IE 和非 IE 得到的数组对象的长度不一致。IE 会以 ECMAScript 规范第三版中规定的方式解析该数组。即该数组的长度将比其他浏览器多 1。
该问题将造成 IE 和非 IE 得到的数组长度不一致。
IE6 IE7 IE8 |
---|
分析以下代码:
alert([1,2,3,].length);
以上代码在各浏览器中的运行结果如下:
IE | 其他浏览器 |
---|---|
4 | 3 |
可见:IE 没有忽略最后一个元素,这与 ECMAScript 规范第三版的规则相符,而其他浏览器则遵循 ECMAScript 规范第五版中的规则。
数组直接量的最后不要出现 ',',以保证兼容各浏览器。
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: |
IE6
IE7 IE8 Firefox 3.6 Chrome 4.0.302.3 dev Safari 4.0.4 |
测试页面: | array.html |
本文更新时间: | 2010-07-23 |
数组 Array 逗号 长度 length 直接量