定义:
arguments对象是所有(非箭头)函数中都可用的局部变量,我们可以用arguments[0]的形式取值
类数组:
arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。
转化为数组
var args = Array.prototype.slice.call(arguments);
// 利用空数组上继承的原型方法
var args = [].slice.call(arguments);
// ES2015
const args = Array.from(arguments);
const args = [...arguments];
类型:
console.log(typeof arguments); // 'object'
用法
1、利用arg的length属性,遍历参数求和
function add() {
var sum =0,
len = arguments.length;
for(var i=0; i<len; i++){
sum += arguments[i];
}
return sum;
}
add() // 0
add(1) // 1
add(1,2,3,4); // 10
2、一个链接字符串的方法
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
当非严格模式中的函数没有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值会跟踪参数的值
function func(a) {
arguments[0] = 99; // 更新了arguments[0] 同样更新了a
console.log(a);
console.log(arguments[0]);
}
func(10); // 99 99
当非严格模式中的函数有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值不会跟踪参数的值
function func(a = 55) {
a = 99
arguments[0] = 99;
console.log(a);
console.log(arguments[0]);
}
func(10); // 10 10
function func(a = 55) {
console.log(arguments[0]);
}
func(); // undefined