伪数组
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循环较好)