Javascript對json及array中多餘逗號處理

在Javascript中,若是出現如下代碼json

var json = {
    name: 'jim',
    age: 16, //注意,這裏多了一個逗號
};

json.toString = function(){
    return 'Name:' + this.name + ', Age:' + this.age;
}

console.log(json.toString());

在標準瀏覽器、IE8+ 中,都能正常的執行,但在IE六、7中,卻會報錯 。

一樣,在array中如果多了一個逗號呢,代碼以下:數組

var animal = ['sheep', 'cat', 'dog',];//一樣多了一個逗號
for(var i = 0,length = animal.length; i<=length; i++){
    console.log(animal[i]);
}
console.log(animal.length);

IE中不會報錯,可是,確會有個很嚴重的問題。

IE六、七、8中會認爲animal.length等於4,其中的元素爲 'sheep', 'cat', 'dog', undefined瀏覽器

但標準瀏覽器和IE9中,忽略最後多餘的逗號。 其實,在ECMAScript 5中有所規定,對於json或array中多餘的逗號進行忽略處理,可是直到IE9,才實現該規範。ide

ECMAScript 5 11.1.4 寫道: 

this

Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in the element list is not preceded by an AssignmentExpression (i.e., a comma at the beginning or after another comma), the missing array element contributes to the length of the Array and increases the index of subsequent elements. Elided array elements are not defined. If an element is elided at the end of an array, that element does not contribute to the length of the Array. spa

曾經風靡一時的 最簡IE判斷寫法,就是應用了IE6~8中的這個bug,可是IE9中這個bug再也不存在,這種判斷再也不適用。code

/**
 * 這裏具體看看,若數組中僅有一個數字元素,-[1]則返回-1
 * 但若數組中元素個數大於一個,則返回NaN
 * IE6~8 中,[1,]被認爲是兩個元素,返回了NaN, !NaN == true
 * 標準瀏覽器和IE9中忽略多餘逗號,返回-1, !-1 == false
 */
var ie = !-[1,];
alert(ie);
所以,爲了代碼兼容性,應當注意多餘逗號現象。
相關文章
相關標籤/搜索