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對象,都是構建在偽數組的基礎之上的。