function add(num1, num2) {console.log(arguments); // { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5, '5': 6, '6': 7 }
}add(1, 2, 3, 4, 5, 6, 7);
从arguments对象输出的内容我们可以看出
arguments的原型指向的是Object,而array的原型指向的是Array,所以arguments严格来说不是个数组,一般我们把它称作是伪数组或者类数组。
同:
length
获取长度index:value
的形式for...of
进行遍历异:
map
、forEach
function add(num1, num2) {const newArr = [];for (let i = 0; i < arguments.length; i++) {newArr.push(arguments[i] * 10); // 遍历的时候将每个元素*10}console.log(newArr);
}add(1, 2, 3, 4, 5, 6, 7);
####方法二 slice
var newArr = Array.prototype.slice.call(arguments);
Array.prototype.slice
的内部实现(大致):
Array.prototype.slice = function(start,end) {// 获取到数组(包含类数组)var arr = this;// 不传递参数,则使用默认值start = start || 0end = end || arr.lengthvar newArr = []for(var i = start; i < end; i++) { // 遍历数组newArr.push(arr[i])}return newArr
}
Array.from :
var newArr = Array.from(arguments)
扩展运算符 :
var newArr = [...arguments]
var foo = (num1,num2) => {console.log(arguments);
};foo(1,2);
箭头函数中没有arguments
,那么就会向上查找:
arguments
变量的,所以报undefined
的错误我们使用闭包的方法,可以在内部函数中访问外层函数的arguments
function foo (num) {retrun () => {console.log(arguments) // 123}
}var fn = foo(123)
fn()
function sum(...theArgs) {return theArgs.reduce((previous, current) => {return previous + current;});
}function(a, b, ...theArgs) {// ...theArgs保存的是剩余的实参
}
上一篇:系统重装漏洞
下一篇:产品经理需要了解的前后端技术知识