2012-02-21 51 views
2

可能重複的措辭之間的差別:
[].slice or Array.prototype.slice是什麼第一和第二書面

第一

(function() { 
    var slice = Array.prototype.slice, 
     aArguments = slice.apply(arguments); 
})(10, 20, 30); 

第二

(function() { 
    var aArguments = [].slice.apply(arguments); 
})(10, 20, 30); 

有什麼區別?

只有速度?

+0

「只有速度?」這甚至會有速度差異嗎? – Thilo 2012-02-21 03:35:08

+0

@Thilo它呢。 'Array.prototype.slice'快於'[] .slice' – Raynos 2012-02-21 04:13:25

+0

@ Raynos-可能是因爲第二個需要在每次計算表達式時創建一個新的(無用的)數組實例。更好的比較會使用'slice = [] .slice;'但那不是OP。對於一次性執行,這並不重要。 – RobG 2012-02-21 04:34:05

回答

1

得到相同.slice()方法只是不同的手段。有關Array.prototype的方法可從所有Array對象中獲得。

  • 第一個需要更多的對象屬性查找。

  • 第二個需要一個新的數組

性能考慮將可能實現之間變化的創建,並且很可能較小。


請注意,您還可以,如果你想所有的參數做到這一點...

var aArguments = Array.apply(null, arguments); 
2

在第二個版本中,要創建一個Array對象。

在第一個版本中,不會創建其他對象 - 您直接引用Array原型上的函數並使用它。

+0

謝謝@蒂莫西。 – Anurag 2012-02-21 03:34:59

+0

你忘了縮小收益'slice.apply'縮小了很多,然後'[] .slice.apply' – Raynos 2012-02-21 04:13:57

+0

@Raynos你可以給這個例子縮小比例嗎? – Anurag 2012-02-21 17:43:01

-1

性能差異可以忽略不計。

如果您想要查看性能差異的確切結果,請查看this performance test的結果,如果您願意,可以自己運行。

+0

有人有這個問題嗎?這是微不足道的。看圖。 = / – 2012-02-23 00:49:30

相關問題