处理无命名参数

ES5 中的无命名参数

ES6 不定参数

ES6中,在函数的命名参数前添加三个点(...) 就表明这是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数

通过这个数组可以逐一访问里面的参数。使用不定参数重写pick() 函数

在上述函数中,keys包含的是object之后传入的所有参数(而arguments对象包含的则是所有传入的参数,包括object)

函数的length属性统计的是函数命名参数的数量,不定参数的加入不会影响length属性的值,pick()函数length为1,只有object

不定参数的使用限制

(1)每个函数最多只能声明一个不定参数,而且一定要放在所有参数末尾

(2)不定参数不能用于对象字面量setter之中

对象字面量setter的参数只能为一个

不定参数对arguments对象的影响

不定参数设计的初衷是为了代替JavaScript的arguments对象。起初,在ECMAScript4草案中,arguments对象被移除并添加了不定参数的特性,从而可以传入不限数量的参数

但是ECMAScript4 从未被标准化,这个想法被搁置了。直到重新引入了ECMAScript6 标准,唯一区别是arguments对象依然存在

如果声明函数时定义了不定参数,则在函数被调用时,arguments对象包含了所有传入函数的参数,就像这样:

增强的Function构造函数

上述为通常利用Function构造函数创建函数的方式,接收字符串形式的参数,分别为函数参数和函数体

ES6中支持在创建函数时定义默认参数和不定参数,如下:

也支持不定参数:

展开运算符

Math.max(), 接收任意数量的参数并返回值最大的那个

如果只处理两个值,Math.max()非常简单易用

但是如果想从数组中返回最大值呢,该怎么做呢,难道把数组元素全部一个个写入吗,这不太现实!

ES5 早期版本中,可以使用apply() 方法

这个方案确实可行,但是难看出代码意图

ES6 中使用不定参数就很方便了

可以将展开运算符与其他正常传入的参数混合使用,假如你想限定Math.max() 返回的最小值为0,可以单独传入限定值,如下:

猜你喜欢

转载自www.cnblogs.com/aizzz/p/9790941.html
今日推荐