ES6 Rest参数

Rest 参数接受函数的多余参数,组成一个数组,放在形参的最后,形式如下:

    <script>
       function func(a,b,...args){    // args,可以自主命名
           // 函数体
       }
    </script>

[1] Rest 参数与 arguments 对象的区别:

  • rest 参数,只包括那些没有给出名称的参数,arguments 包含所有参数
  • arguments 对象不是真正的数组,而 rest 参数是数组实例,可以直接应用 sort、map、forEach、pop 等方法
// Rest 参数简化了使用 arguments 获取多余参数的方法

    <script>
        // arguments 方法
        function func(a, b) {
            var args = Array.prototype.slice.call(arguments);
            console.log(args)
        }
        func(1, 2)

        // Rest 方法
        function func(a, b, ...args) {
            // ...
        }
    </script>
  • arguments 对象拥有一些自己额外的功能

[2] Rest 参数之后不能再有其他参数( 即,只能是最后一个参数 ),否则会报错

函数的 length 属性,不包括 rest 参数

(function(a) {}).length     // 1
(function(...a) {}).length      // 0
(function(a, b, ...c)).length   // 2

[3] Rest 参数可以被解构( 即,将 rest 参数的数据解析后一一对应 ),不要忘记参数用 [] 括起来,因为它是数组

function f(...[a, b, c]) {  
  return a + b + c;  
}  
  
f(1)          //NaN 因为只传递一个值,其实需要三个值  
f(1, 2, 3)    // 6  
f(1, 2, 3, 4) // 6 (第四值没有与之对应的变量名)