1.常見的偽數組有哪些?
arguments、通過document.getElements..獲取到的內容
2.偽數組有什么特點?
具有length屬性,也是一個一個的元素組成的,但是構造器不是Array,不能使用數組的方法
3.轉換為真正的數組的方法:
通過遍歷將偽數組里元素放入到一個新的數組里
通過call改變數組slice方法里的this指向
因為我想要讓偽數組也能使用數組的方法,為什么偽數組就不能使用數組方法,為什么數組就能使用push方法
一個數組都是由她的構造器實例化出來的,var a = [];這是js的語法糖;正規的用法:var a = new Array()
因為Array是一個構造函數,每一個構造函數都有原型,且構造函數構造出來的實例可以使用原型上的方法,也就是說因為Array的原型上有一些方法,所以每一個數組都可以使用push等方法
因為偽數組的構造器不是Array,當然不能使用Array原型上的push方法
現在數組有一個方法slice,這個方法每次都會返回一個新數組,如果不傳參的話,返回的新數組的元素和原數組的元素是一模一樣的
如果偽元素也能執行這個方法的話,那么是不是就返回一個真正的數組,並且元素一樣,但是不能直接執行
所以我們使用偷梁換柱的方法,讓一個真正的數組,或者直接從Array.prototype上執行slice方法,但是在執行的時候通過call來將里面的this換成偽數組,這樣的話,就會返回一個元素和偽數組元素一樣的真正數組了
let arr = [].slice.call(arg) //Array.prototype.slice.call(arg)