rest,查百度词典,释义为 [rest] n. 休息; 剩余部分; 支持物; 宁静,安宁,rest paramter直译过来就是剩余参数,也可以叫可变参数;它用来收集多个参数到一个collection中,是标准的数组类型,也就意味着它可以调用Array的所有方法;
function f1(arg1,arg2,...restArgArr){
console.log("arg1:%s,arg2:%s,restArgArr:%s,isArray:%s",
arg1,arg2,
restArgArr,
restArgArr instanceof Array);
//输出结果:arg1:1,arg2:2,restArgArr:3,4,5,isArray:true
}
f1(1,2,3,4,5);
为了更深入的理解,看一下babel编译的结果
源码
function f1(...restArgArr){
console.log(
restArgArr instanceof Array);
}
编译后
function f1() {
for (var _len = arguments.length, restArgArr = Array(_len), _key = 0; _key < _len; _key++) {
restArgArr[_key] = arguments[_key];
}
console.log(restArgArr instanceof Array);
}
可以看到,是将arguments放入Array中,这下清楚了,可变参数就是个数组!
可变参数与arguments的区别
- 可变参数是标准数组类型,可以使用数组的所有方法,拥有数组的所有属性,而arguments是个“伪数组”,仅有length属性、可以通过下标获取值,但不能使用数组的方法比如indexOf()
function f(...restArg){
console.log(restArg.indexOf(11));//0
console.log(arguments.indexOf(11));//arguments.indexOf is not a function
}
f(11);
- arguments是内置属性,每个函数都有,而可变参数只有显式声明才有;
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20298.html