IE下のarrayのsplice方法のbug
1085 ワード
今日コードを書いて、やっと発見しました. IE下のarrayのsplice方法のbug
var a=[a],[b];
a.splice(0) alert(a.length) // IEの下では2です.Googleの下では0です.
定義によると、splice()の2番目のパラメータは書きません.最後まで削除します.なぜIEは一つも削除しないと思いますか?
検証した結果、問題はIE 8及び以下のバージョンで発生しました.このバグを修復できます.
var a=[a],[b];
a.splice(0) alert(a.length) // IEの下では2です.Googleの下では0です.
定義によると、splice()の2番目のパラメータは書きません.最後まで削除します.なぜIEは一つも削除しないと思いますか?
検証した結果、問題はIE 8及び以下のバージョンで発生しました.このバグを修復できます.
// check if it is IE and it's version is 8 or older
if (document.documentMode && document.documentMode < 9) {
// save original function of splice
var originalSplice = Array.prototype.splice;
// provide a new implementation
Array.prototype.splice = function() {
var arr = [], i = 0, max = arguments.length;
for (; i < max; i++){
arr.push(arguments[i]);
}
// if this function had only one argument
// compute 'deleteCount' and push it into arr
if (arr.length==1) {
arr.push(this.length - arr[0]);
}
// invoke original splice() with our new arguments array
return originalSplice.apply(this, arr);
};
}