Array.prototype.slice.call(arguments)
原理是數組的slice()方法可以從已有數組中返回一個新數組,它可以接受兩個參數arr.slice(start,end),第一個參數規定從何處開始選取,第二個參數表示從何處選取結束,如果不傳參將返回原數組的一個副本,但該方法不會修改原數組,而是返回截取的新數組,根據這個就可以將類數組轉化成數組對象啦!
Array.prototype.splice.call(arguments,0)
這種方式的原理和slice(start,end)方法差不多,都是通過返回一個新的數組來將類數組對象轉化成數組):
1.splice(start,count,item)方法傳入的參數不同,第一個參數代表開始選取的元素位置,第二個說明選取的元素數量(不傳說明從第一個參數位置開始到數組的最后一個元素),第三個參數代表需要添加的元素(將會添加到第一個參數位置上)。
2.splice()方法刪除/代替/添加元素之后將會影響到原來的數組,而splice()則不會影響。
Array.from(array-like) ES6方法
Array.from(obj, mapFn, thisArg) Array.from方法可以將一個類數組對象或可迭代對象轉換成真實的數組
obj:想要轉換成數組的偽數組對象或可迭代對象。
mapFn :(可選參數) 如果指定了該參數,新數組中的每個元素會執行該回調函數。
thisArg :(可選參數)可選參數,執行回調函數 mapFn 時 this 對象。
Array.from() 方法有一個可選參數 mapFn,讓你可以在最后生成的數組上再執行一次 map 方法后再返回。也就是說 Array.from(obj, mapFn, thisArg) 就相當于 Array.from(obj).map(mapFn, thisArg), 除非創建的不是可用的中間數組。 這對一些數組的子類,如 typed arrays 來說很重要, 因為中間數組的值在調用 map() 時需要是適當的類型。
from() 的 length 屬性為 1 。
擴展運算符(...)ES6方法
//arguments對象
function foo(){
var args = [...arguments]
}
//NodeList對象
[...document.querySelectorAll('div')]
循環遍歷類數組對象,push到新創建的數組對象里
var length = arrayLike.length;
var arr = [];
for (var i = 0; i < length; i++) {
arr.push(arrayLike[i]);
return arr;
}