Array.from 方法用于將兩類(lèi)對(duì)象轉(zhuǎn)為真正的數(shù)組:類(lèi)似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)。
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的寫(xiě)法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的寫(xiě)法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
實(shí)際應(yīng)用中,常見(jiàn)的類(lèi)似數(shù)組的對(duì)象是DOM操作返回的NodeList集合,以及函數(shù)內(nèi)部的arguments對(duì)象。Array.from都可以將它們轉(zhuǎn)為真正的數(shù)組。
擴(kuò)展運(yùn)算符(...)也可以將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)為數(shù)組。
// arguments對(duì)象
function foo() {
var args = [...arguments];
}
// NodeList對(duì)象
[...document.querySelectorAll('div')]
擴(kuò)展運(yùn)算符背后調(diào)用的是遍歷器接口(Symbol.iterator),如果一個(gè)對(duì)象沒(méi)有部署這個(gè)接口,就無(wú)法轉(zhuǎn)換。Array.from方法還支持類(lèi)似數(shù)組的對(duì)象。所謂類(lèi)似數(shù)組的對(duì)象,本質(zhì)特征只有一點(diǎn),即必須有l(wèi)ength屬性。因此,任何有l(wèi)ength屬性的對(duì)象,都可以通過(guò)Array.from方法轉(zhuǎn)為數(shù)組,而此時(shí)擴(kuò)展運(yùn)算符就無(wú)法轉(zhuǎn)換。