采用扩展运营商,功能参数对象
我知道一个人必须非常小心的功能Arguments object采用扩展运营商,功能参数对象
但没有任何已知的缺点(优化/性能问题)利用传播与运营参数对象?或者这完全没问题?
我要创建的传递给函数的参数未知量的数组:
function Numbers(){
this.numbers = [...arguments];
}
看起来很整齐,并在MDN页有关参数对象甚至建议我可以使用传播运算符为此:
您还可以使用
Array.from()
方法或s pread运算符将参数转换为真实的数组。
但我还是想看看别人是否对此有其他意见。
这完全没关系,有没有较老式的ES5
this.numbers = [].slice.call(arguments);
使用扩展不事吸尘器ES2015
this.numbers = [...arguments];
同一只记得它赢得了”缺点t在箭头功能(没有arguments
),你很好。 Rest参数和Array.from是其他选项,也很好。
它的优良使用传播符号(它不是一个运营商)与arguments
。或者至少,它使用arguments
就好。在ES2015及以上版本(例如,如果您有传播符号),使用arguments
的呼叫非常有限。
而事实上,有一个在你的例子没有必要:使用REST参数:
function Numbers(...args){
this.numbers = args;
}
在这个例子中,args
是一个数组。一个真正的数组。
不错,不知道我可以这样做:) – Wilt
原因之一的人说不要使用arguments对象是因为它看起来像一个数组,但它不是:
arguments对象不是一个数组。它类似于一个数组,但除长度外没有任何数组属性。例如,它没有pop方法。然而,它可以转化为一个真正的数组:
你是好去这里,因为像Array.from()传播经营者,使新副本
这是*一个*原因。松散模式也会影响性能,箭头函数没有自己的'arguments'对象。 –
@ T.J.Crowder建议相同。没想到那个...... – Wilt