企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
~~~js function(a, b, ...theArgs) { // ... } ~~~ 如果函数的最后一个命名参数以`...`为前缀,则它将成为一个由剩余参数组成的真数组,其中从`0`(包括)到`theArgs.length`(排除)的元素由传递给函数的实际参数提供。 ### 剩余参数和 `arguments`对象的区别 剩余参数和 arguments对象之间的区别主要有三个: * 剩余参数只包含那些没有对应形参的实参,而`arguments`对象包含了传给函数的所有实参。 * `arguments`对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如sort,map,forEach,pop * `arguments`对象还有一些附加的属性 (如`callee`属性)。 ### 从 arguments 到数组 ~~~ // Before rest parameters, "arguments" could be converted to a normal array using: function f(a, b) { var normalArray = Array.prototype.slice.call(arguments); // -- or -- var normalArray = [].slice.call(arguments); // -- or -- var normalArray = Array.from(arguments); var first = normalArray.shift(); // OK, gives the first argument var first = arguments.shift(); // ERROR (arguments is not a normal array) } // Now we can easily gain access to a normal array using a rest parameter function f(...args) { var normalArray = args; var first = normalArray.shift(); // OK, gives the first argument } ~~~