站長資訊網
        最全最豐富的資訊網站

        在javascript中什么是偽數組

        在javascript中,偽數組又稱類數組,是一個類似數組的對象,是一種按照索引存儲數據且具有length屬性的對象;因為是對象,所以偽數組不具有數組的push()、forEach()等方法。

        在javascript中什么是偽數組

        本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

        偽數組的定義和特性

        偽數組 (ArrayLike) ,又稱類數組。是一個類似數組的對象,是一種按照索引存儲數據且具有 length 屬性的對象。但是有如下幾個特征。

        • 按索引方式儲存數據

          0: xxx, 1: xxx, 2: xxx...

        • 具有length屬性

          但是length屬性不是動態的,不會隨著成員的變化而改變

        • 不具有數組的push()、forEach()等方法

          arrayLike.__proto__ === Object.prototype;   //true  arrayLike instanceof Object; //true  arrayLike instanceof Array; //false

        常見的典型偽數組,包括jQuery中通過 $() 獲取的DOM元素集, 函數中的的 arguments 對象, 以及字符串String對象。

        例子:

            var arrLike = {         0: 'a',         1: 'b',         2: 'c',         length: 3,     }     arrLike[1]; //'a'     arrLike.length; //3     arrLike.push('d'); //Uncaught TypeError: arrLike.push is not a function

        偽數組轉化成真數組的方法

            var arrLike = {         0: 'a',         1: 'b',         2: 'c',         length: 3,     };

        1、遍歷添加入一個空數組

            var arr = [];     for(var i = 0; i < arrLike.length; i++){         arr.push(arrLike[i]);     }

        比較簡單易懂,但是步驟略顯繁瑣。

        2、利用數組的slice()方法 【推薦】

            ;[].slice.call(arrLike);

        或者

            Array.prototype.slice.apply(arrLike);

        使用slice()返回一個新的數組,用call()或apply()把他的作用環境指向偽數組。

        注意這個返回的數組中,不會保留索引值以外的其他額外屬性。

        比如jQuery中$()獲取的DOM偽數組,里面的context屬性在被此方法轉化之后就不會保留。

        模擬一下slice()的內部實現

            Array.prtotype.slice = function(start, end){         var result = new Array();         var start = start | 0;         var end = end | this.length;         for(var i = start; i < end; i++){             result.push(this[i]);         }         return result;     }

        3、修改原型指向

            arrLike.__proto__ = Array.prototype;

        這樣arrLike就繼承了Array.prototype中的方法,可以使用push(),unshift()等方法了,length值也會隨之動態改變。

        另外這種直接修改原型鏈的方法,還會保留下偽數組中的所有屬性,包括不是索引值的屬性。

        4、ES2015中的Array.from()方法

        Array.from() 方法從一個類似數組或可迭代對象中創建一個新的數組實例。

            var arr = Array.from(arrLike);

        得到的結果與第二種方法類似,只保留索引值內的屬性。

        【推薦學習:javascript高級教程】

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品日韩在线视频一区二区三区| 亚洲欧美日韩久久精品| 久久精品三级视频| 大桥未久在线精品视频在线| 亚洲国产精品13p| 成人免费精品网站在线观看影片| 国产亚洲精品美女久久久 | 精品无码AV一区二区三区不卡| 好湿好大硬得深一点动态图91精品福利一区二区 | 国产办公室秘书无码精品99| 亚洲午夜福利精品久久| 久久夜色撩人精品国产| 隔壁老王国产在线精品| 欧美国产日本精品一区二区三区| 99在线精品视频观看免费| 久久国产精品99国产精| 日韩精品无码一区二区三区免费| 亚洲欧美日韩精品专区| 午夜精品久久久内射近拍高清| 久久精品国产精品亚洲艾草网美妙| 99riav国产精品| 四虎国产精品永久地址51| 国产精品一二区| 国产精品臀控福利在线观看| 国产精品污视频| 欧美777精品久久久久网| 久久久久夜夜夜精品国产| 国产在线精品网址你懂的| 55夜色66夜色国产精品视频| 国产精品亚洲日韩欧美色窝窝色欲| 人妻少妇精品视频一区二区三区| 亚洲精品卡2卡3卡4卡5卡区| 中日韩产精品1卡二卡三卡| 无码日韩人妻精品久久蜜桃| 午夜精品久久久久久中宇| 久久99国产综合精品| 久久99精品久久久久子伦| 国产精品对白刺激久久久| 成人精品综合免费视频| 久久夜色精品国产亚洲| 中文字幕精品视频|