...args剩余参数和 arguments对象的区别

一、...args剩余参数(展开运算符)

允许一个表达式在某处展开。展开运算法 在 多个参数(函数调用)、多个元素(用于数组和字面量)和多个变量(用于解构赋值) 地方使用。剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

如果函数的最后一个命名参数以 ... 为前缀,则它会将所有后面剩余的是实参个数包裹成一个数组。

// 例子

function test(a, b, ...args) {

console.log(args)

}

test(1,2,3,4) // [3, 4]

二、arguments对象

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。arguments对象并不是一个数组,是一个类数组对象,在调用时请注意。

arguments 中包含了函数传递的参数、length、和 callee 属性。

length 属性表示的是实参的长度,即调用函数的时候传入的参数个数。

callee 属性则指向的函数自身,我们可以通过它来调用自身函数。

arguments 是一个经典的类数组对象,我们可以通过Function.call 或者 Function.apply 方法来间接调用数组的方法,也可以直接通过 Array.prototype.slice 或 Array.prototype.splice 等方法把类数组对象转换成真正的数组。

三、...args剩余参数和 arguments对象的区别

  • 剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
  • arguments对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sort,map,forEach或pop。
  • arguments对象还有一些附加的属性 (如callee属性)。
posted @ 2022-09-30 09:16  努力的杨先生  阅读(606)  评论(0)    收藏  举报