ES6 rest parameter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjun5159/article/details/86750349

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是内置属性,每个函数都有,而可变参数只有显式声明才有;

猜你喜欢

转载自blog.csdn.net/wangjun5159/article/details/86750349