ES5的方法
主要借用[].slice.call()實現(xiàn)
var foo = function() {
var arr = [].slice.call(arguments)
var result = Object.prototype.toString.call(arr)
console.log(arr) //[]
}()
ES6的方法
- 使用
Array.from, 值需要對象有l(wèi)ength屬性, 就可以轉(zhuǎn)換成數(shù)組
const arrayLike = {
length: 5
}
let arr2 = Array.from(arrayLike)
//[undefined, undefined, undefined, undefined, undefined]
- 使用展開運算符
但是展開運算符只能將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成數(shù)組, 因為本質(zhì)是調(diào)用遍歷器接口(Symbol.iterator
),如果一個對象沒有部署這個接口,就無法轉(zhuǎn)換 --- 阮一峰ES6
// arguments對象
function foo() {
var args = [...arguments];
}
// NodeList對象
[...document.querySelectorAll('div')]
兼容寫法
const toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj))();
Demo
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的寫法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的寫法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']