JS“零部件”
一些常用但不曾深入了解的零散知识点整理。
arguments
在 JavaScript 中,
arguments
是一个特殊的对象(类数组)具有length
属性,代表函数调用时传递的所有参数,包括那些没有在函数定义中声明的参数。arguments
可以用来访问所有传递给函数的参数,无论它们是否被声明。
js
function foo(a, b) {
console.log((a == arguments[0]) == true); // true
console.log(a); // 0
console.log(b); // 1
console.log(arguments[0]); // 0
console.log(arguments[1]); // 1
console.log(arguments[2]); // 2
}
foo(0, 1, 2);
上述代码中,函数 foo
只声明了两个参数a
和b
,但是通过 arguments
对象,我们可以访问传递给函数的所有三个参数。
...args(rest parameters
)
...args
语法可以定义一个函数的剩余参数(rest parameters
)。即,剩余参数允许一个函数接收任意数量的参数,并将它们打包到一个数组里,以便在函数内部进行处理。
js
function foo(a, b, ...args) {
console.log(a); // 0
console.log(b); // 1
console.log(args); // [2,3,4]
}
foo(0, 1, 2, 3, 4);
这里的 args
仅仅是一个代指,可以是rest
或其他自定义名称,关键点是它前面的 ...
(展开运算符),如果函数的最后一个命名参数以 ...
为前缀,则它会将所有后面剩余的是实参个数包裹成一个数组。
arguments 和 ...rest (rest parameters) 异同点
二者都能得到函数的未规定数量的所有参数;
arguments
表示函数的所有参数集合,是一个类数组对象,具有length
属性;...args
表示一个函数的参数中未与形参相对应的剩余参数集合,是一个数组;