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 (第四值没有与之对应的变量名)