采用扩展运营商,功能参数对象

采用扩展运营商,功能参数对象

问题描述:

我知道一个人必须非常小心的功能Arguments object采用扩展运营商,功能参数对象

但没有任何已知的缺点(优化/性能问题)利用传播与运营参数对象?或者这完全没问题?

我要创建的传递给函数的参数未知量的数组:

function Numbers(){ 
    this.numbers = [...arguments]; 
} 

A fiddle can be found here

看起来很整齐,并在MDN页有关参数对象甚至建议我可以使用传播运算符为此:

您还可以使用Array.from()方法或s pread运算符将参数转换为真实的数组。

但我还是想看看别人是否对此有其他意见。

您还可以使用rest parameters

function Numbers(...numbers){ 
    this.numbers = numbers; 
} 
+1

@ T.J.Crowder建议相同。没想到那个...... – Wilt

这完全没关系,有没有较老式的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是一个数组。一个真正的数组。

+1

不错,不知道我可以这样做:) – Wilt

原因之一的人说不要使用arguments对象是因为它看起来像一个数组,但它不是:

arguments对象不是一个数组。它类似于一个数组,但除长度外没有任何数组属性。例如,它没有pop方法。然而,它可以转化为一个真正的数组:

你是好去这里,因为像Array.from()传播经营者,使新副本

+1

这是*一个*原因。松散模式也会影响性能,箭头函数没有自己的'arguments'对象。 –