原文:https://blog.csdn.net/LLLyyx/article/details/78141900
1百炬、Array.prototype.slice.call()?
這種方法是借用了數(shù)組原型中的slice方法微服,返回一個數(shù)組以蕴。slice方法的內(nèi)部實現(xiàn):
Array.prototype.slice = function(start,end){
? ? ? var result = new Array();?
? ? ? start = start || 0;?
? ? ? end = end || this.length; //使用call之后this指向了類數(shù)組對象
? ? ? for(var i = start; i < end; i++){?
? ? ? ? ? result.push(this[i]);?
? ? ? }?
? ? ? return result;?
}
一個通用的轉(zhuǎn)換函數(shù):
var toArray = function(s){
? ? try{?
? ? ? ? return Array.prototype.slice.call(s);?
? ? } catch(e){?
? ? ? ? ? ? var arr = [];?
? ? ? ? ? ? for(var i = 0,len = s.length; i < len; i++){?
? ? ? ? ? ? ? ? arr[i] = s[i];?
? ? ? ? ? ? }?
? ? ? ? ? ? return arr;?
? ? }
2辛孵、Array.from()?
Array.from()是ES6中新增的方法,可以將兩類對象轉(zhuǎn)為真正的數(shù)組:類數(shù)組對象和可遍歷(iterable)對象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)宝与。
var arrayLike = {
? ? '0':'a',
? ? '1':'b',
? ? '2':'c',
? ? length:3
};
var arr = Array.from(arrayLike);//['a','b','c']
//把NodeList對象轉(zhuǎn)換為數(shù)組焚廊,然后使用數(shù)組的forEach方法
var ps = document.querySelectorAll('p');
Array.from(ps).forEach(p){
? ? console.log(p);
});? ? ? ? ? ? ? ? ? ? ? ? ? ?
//轉(zhuǎn)換arguments對象為數(shù)組
function foo(){
? ? var args = Array.from(arguments);
? ? //...
}
//只要是部署了Iterator接口的數(shù)據(jù)結(jié)構(gòu),Array.from都能將其轉(zhuǎn)換為數(shù)組
Array.from('hello');? ? ? ? ? ? //['h','e','l','l','o']
3习劫、擴(kuò)展運(yùn)算符(…)?
同樣是ES6中新增的內(nèi)容咆瘟,擴(kuò)展運(yùn)算符(…)也可以將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)為數(shù)組
//arguments對象的轉(zhuǎn)換
function foo(){?
?var args = [...arguments];
}
//NodeList對象的轉(zhuǎn)換
[...document.querySelectorAll('p')]
擴(kuò)展運(yùn)算符實際上調(diào)用的是遍歷器接口,如果一個對象沒有部署此接口就無法完成轉(zhuǎn)換