1. 程式人生 > >支援IE8及以下的,原生JS陣列迭代的五種方法

支援IE8及以下的,原生JS陣列迭代的五種方法

           IE真是讓前端開發者頭疼的問題,在解決陣列的迭代的過程中,IE8及以下並不能很好的支援。於是去網上搜了搜陣列迭代中的every方法,在一個部落格大V中搬過來後,發現仍會報錯,又比對了下網上的程式碼,發現我複製的並沒有錯(QAQ  也不試試就直接用放到部落格,這種態度蠻無語的)。於是又看著拿過來的程式碼,進行了修改和擴充套件。

        ① 陣列中的every方法         

     if (!Array.prototype.every) {
         Array.prototype.every = function (every_fun, thisArg) {
             var _this = null,
                 iKey = 0,
                 len = this.length; //無符號右移
             if (typeof every_fun !== "function") {
                 throw new TypeError("every_fun is not a function");
             }
             if (thisArg) {
                 _this = thisArg;
             }//繫結執行環境
             for (; iKey < len; iKey++) {
                 var  key_Value = this[iKey];
                 if(!every_fun.call(_this, key_Value, iKey, this)){
                     return false;
                 };
             }
             return true;
         }
     }
     var arr = [2,33,22],
         every_bool = arr.every(function(item,index,array){
               return item >1; 
     });
     alert(every_bool);  //true
        ②陣列的filter方法    
    if (!Array.prototype.filter) {
        Array.prototype.filter = function (filter_fun, thisArg) {
            var _this = null;
                arr_fil = [],
                iKey = 0,
                arr_len = this.length;
            if (typeof filter_fun != 'function') {
                throw new Error('filter_fun is not a function');
            }
            if (thisArg) {
                _this = thisArg;
            }
            for (; iKey < arr_len; iKey++) {
                var key_value = this[iKey];
                filter_fun.call(_this, key_value, iKey, this) && arr_fil.push(key_value);
            }
            return arr_fil;
        }
    }
    var arr = [1, 23, 8]
        filter_arr = arr.filter(function (item, index, array) {
           return item > 2;
    });
    alert(filter_arr)//[23,8]
       ③  陣列的some 方法         
 if (!Array.prototype.some) {
        Array.prototype.some = function (some_fun, thisArg) {
            var _this = null,
                iKey = 0,
                arr_len = this.length;
            if (typeof some_fun != 'function') {
                throw new typeError('some_fun is not a function')
            }
            if (thisArg) {
                _this = thisArg;
            }
            for (; iKey < arr_len; iKey++) {
                var key_value = this[iKey];
                // some_fun.call(_this, arr_value, i, this)&&return true;
                if (some_fun.call(_this, key_value, iKey, this)) {
                    return true;
                }
            }
            return false;
        }
    }
    var arr = [0, 22, 33];
        some_bool = arr.some(function (item, index, array) {
           return item > 1;
    })
    alert(some_bool)  //ture
           至於其他的兩種陣列迭代的方法,大家照著寫就好了,也蠻簡單的。

        在這裡丟擲一個問題,為什麼邏輯與&&和邏輯或||操作符後面跟上return 會直接報錯,有知道的小夥伴麼,求大佬指導。