argument是一个伪数组
伪数组:就是长得跟数组差不多,有索引有长度,但是不能使用数组的操作方法
例:
var 伪数组 = {
0:"admin",
1:18,
length:2
};
console.log(伪数组[0]);
console.log(伪数组.length);
console.log(typeof 伪数组);
for(var i=0;i<伪数组.length;i++){
console.log(伪数组[i]);
}
伪数组.push("hello"); //数组方法不可用,会报错
用不着直接写伪数组,被迫得到伪数组
选择器返回的数组arguments
var op = document.querySelectorAll("#box p");
console.log(op);
op.push("hello");
伪数组转真数组
1.遍历其中的值,逐个放在真数组中
var arr = [];
for(var i=0;i<op.length;i++){
arr.push(op[i]);
}
2.ES6提供了一种方式,专门用来伪转真
var arr = Array.from(op);
3.巧妙的利用call或apply或bind,配合Array原型上的方法实现
伪转真就可使使用数组的方法
arr.push("world");
console.log(arr);
伪数组arguments
arguments:是函数内部,专属的一个数组(伪数组),也叫对象。
用来接收当前函数的所有实参
数据的集合(实参的集合):集合没法直接运算
需要先解析:数组的解析
序号(索引):集合中数据的编号,从0开始,0表示第一个
个数(长度):集合中有几个数据
如何解析: 数组[索引]
如何获取个数(长度):数组.length
arguments的应用场景:
实参的个数不确定时,选择arguments
实参的个数确定时,直接使用形参就可以了
也可以使用es7新增的reduce()方法
reduce()方法接受一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值,
reduce()方法可以作为一个高阶函数,用于函数的compose(放在一起)
例:
var arr=[1,2,3,4]
//累加函数
let a=arr reduce((sum,item)=>{
return sum+item //sum表示一个累加器,item是代理每一项
})
console.log(a) //10