javascript 偽數組和轉化為標准數組


1: 什么是偽數組

偽數組是一個含有length屬性的json對象,

它是按照索引的方式存儲數據,

它並不具有數組的一些方法,只能能通過Array.prototype.slice轉換為真正的數組,並且帶有length屬性的對象。

   

    var obj = {0:'a',1:'b',length:2}; // 偽數組
    var arr = Array.prototype.slice.call(obj); // 轉化為數組    
    console.log(arr);  // 返回["a","b"]

 

2:它和數組的關系

都是模擬集合

 

3:為什么會有偽數組

在日常開發中,有許多的對象是由偽數組組成,比如函數內arguments對象,還有像調用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬於偽數組.

 

4:為什么使用Array.prototype.slice.call()方法可以將偽數組轉化數組

其實我們也可以通過[].slice.call這種形式實現同樣的效果,但是通過prototype的形式執行程序效率更高,同樣代碼也更加優美。 

這個是V8引擎中Array.js對slice方發的實現過程,有興趣的同學可以研究下。

我理解的大概思路就是 ↓ ,可能不對,僅供參考。

1
2
3
4
5
6
7
8
function  slice(obj) {
     var  arr =[];
     var  len = obj.length;  // length 正好對應偽數組中的length屬性
     for ( var  i = 0;i < len;i++){
         arr.push[i] = obj[i];  // i 正好對應偽數組中的索引值
     }
     return  arr;
}

 

 

5:Jquery與偽數組 

其實Jquery內部大量運用了偽數組。可以說整個Jquery對象,都是構建在偽數組的基礎之上的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM