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及び以下のバージョンで発生しました.このバグを修復できます.
// 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);
    	};
    }