如何将伪数组转换成数组?

251 阅读1分钟

伪数组

1.不具有数组所具有的方法

2.拥有length属性

3.按索引(非负数)方式存储数据,该索引会被当作字符串处理

4.可以遍历

5.可转换成数组

eg: 函数的argument参数、通过选择器或者节点获取的Dom对象列表NodeList、jQuery对象(比如$("div"))

ES5

var args = [].slice.call(arguments); // collection
var imgs = [].slice.call(document.querySelectorAll('img')); // NodeList
<!--arguments必须在函数中使用-->

Es6

Array.prototype.from

let args = Array.from(arguments);
let imgs = Array.from(document.querySelectorAll('img'));
imgs.forEach();
<!--ES6废弃了arguments-->
Array.from(arrayLike,mapFn,thisArg);
arrayLike:伪数组
mapFn:遍历函数
thisArg:this指向对象

let array = Array(5); //长度为5的数组
for(let i=0,len = array.length; i<len ;i++){
    array[i] =1;
} //方法繁琐

let array = Array.from({length:5},function(){return 1});

注意点:array.forEach(function(item){
    item =1
}); //改变不了数组的值,原因:对于基本类型我们当次循环拿到的item,只是forEach给我们在另一个地方复制创建新item,是和原数组这个数据没有半毛钱联系的!所以,我们使命给循环拿到的item赋值都是无用功;如果foreach循环操作的数据类型是引用类型,则修改数组内容有效。(建议:foreach只用于遍历,需要操作数组时直接使用传统的for循环较好)