標準參考
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 規范第五版中的規則。
解決方案
數組直接量的最后不要出現 ',',以保證兼容各瀏覽器。
更多信息請查看IT技術專欄