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

        在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號
        主站蜘蛛池模板: 人人妻人人澡人人爽人人精品97 | 亚洲精品国产日韩无码AV永久免费网| 久久久免费精品re6| 国产精品 一区 在线| 国产精品九九九久久九九| 亚洲国产精品VA在线看黑人| 国产精品久操视频| 真实国产乱子伦精品免费| 99久久人妻无码精品系列蜜桃 | 久久国产成人亚洲精品影院| 精品亚洲一区二区| 国内精品伊人久久久久av一坑| 亚洲欧美国产精品第1页| 国产成人1024精品免费| 狠狠色丁香婷婷综合精品视频| 久久精品国产亚洲av麻豆小说 | 九九热在线精品视频| 国产精品丝袜黑色高跟鞋| 最新精品露脸国产在线 | 国产精品99久久99久久久| 自拍偷自拍亚洲精品第1页| 久久夜色撩人精品国产小说| 国产精品你懂的在线播放| 日韩一级精品视频在线观看| 精品久久久久久亚洲| 国产精品高清一区二区人妖| 国产成人无码精品一区二区三区| 无码日韩精品一区二区三区免费| 日本免费精品一区二区三区 | 国产91大片精品一区在线观看| 国产精品毛片VA一区二区三区| 久久久国产乱子伦精品作者| 无码精品人妻一区二区三区免费看| 亚洲国产一成人久久精品| 综合人妻久久一区二区精品| 免费看污污的网站欧美国产精品不卡在线观看 | 国产精品青青在线观看爽香蕉| 成人一区二区三区精品| 国产99久久九九精品无码| 国产精品久久久天天影视香蕉| 国产乱人伦偷精品视频|