REST参数(剩余参数)
MDN:剩余参数语法允许我们将一个不定数量的参数表示为一个数组。
剩余参数必须是函数参数的最后一个参数,它和 arguments对象之间区别如下:
- 剩余参数只包含那些没有对应形参的实参,而
arguments
对象包含了传给函数的所有实参。 -
arguments
对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sort,map,forEach或pop。 -
arguments
对象有一些附加的属性 (如callee
属性)。
使用场景
es5实现:
function sortArguments() {
var args = Array.prototype.slice.call(arguments); //需要先转成数组
var sortedArgs = args.sort();
return sortedArgs;
}
console.log(sortArguments(5, 3, 7, 1)); // shows 1, 3, 5, 7
es6实现:
function sortRestArgs(...theArgs) {
var sortedArgs = theArgs.sort();
return sortedArgs;
}
console.log(sortRestArgs(5,3,7,1)); // shows 1, 3, 5, 7
获取一个不定长度参数的长度
function fun1(...theArgs) {
alert(theArgs.length);
}
fun1(); // 弹出 "0", 因为theArgs没有元素
fun1(5); // 弹出 "1", 因为theArgs只有一个元素
fun1(5, 6, 7); // 弹出 "3", 因为theArgs有三个元素
网友评论