標籤:length lob target java des arguments push function 實現
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方發的實現過程,有興趣的同學可以研究下。
我理解的大概思路就是 ↓ ,可能不對,僅供參考。
| 12345678 |
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對象,都是構建在偽數組的基礎之上的。
javascript 偽數組和轉化為標準數組