开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 24 天,点击查看活动详情
arguments
arguments 是 js 函数中的一个内置对象,它是隐式的,不能显式创建。当函数执行的时候,我们可以在函数内部通过 arguments 关键词来获取它的数据。
当函数参数不定时,使用 arguments 是一个很好的方式。
执行如下代码:
function add () { return arguments;}
var arg = add (1, 2);
console.log(arg)
运行结果:
可以看到 arguments 像是一个数组,我们来验证一下:
调用数组相关的函数也是报错的:
以上可以证明 arguments 的原型上不包含数组的操作方法,它并不是一个数组,而是一个类数组。arguments[0]、arguments.length 等获取参数的一些属性
想要对其进行操作,需要将其转换为真正的数组。
将 arguments 转换为数组
在前面的输出中,可以看到虽然不是数组,但是有 length 属性,而下面这个方法可以使具有 length 属性的 rgument 转为数组。
var args = Array.prototype.slice.call(arguments);
空数组 [] 是 Array 的一个简单实例,可以利用它来进行简化,达到相同的效果:
[].slice.call(arguments)
下面我们来验证一下:
function add () {
var args = Array.prototype.slice.call(arguments);
return args;
}
var arg = add (1, 2);
console.log(arg)
运行结果:
参数变为了数组结构。
[].shift.call( arguments ) 与 [].slice.call( arguments ) 的区别
[].shift.call( arguments ) 与 [].slice.call( arguments ) 的区别其实在于调用的数组方法不同。
- shift:删除数据的第一项元素,并将其返回
- slice:
- 根据参数设置范围,方法返回一个新的数组对象,如果不传参数表示的是获取整个数组的数据(浅拷贝)
- 传参数可以这样写:
[].slice.call(arguments, 1),相当于arguments.slice(1),表示取出所有参数,并从下标为1的位置开始,截取所有数据。