2012-01-31 54 views
2

可能重複:
Where would I use a bitwise operator in JavaScript?位運算的意義在javascript

c/c++位運算是(在低性能處理器顯著ATLEAST)比正常(算術)運算速度更快。 js也適用嗎?我不認爲它的速度更快的原因是按位操作是硬連線的,並且通常在1個處理器週期內完成。但js在沒有任何這樣的硬件(寄存器我的意思)訪問的瀏覽器中運行。我不確定(約70%的確定:))。什麼是按位運算符的典型(或更聰明)用法(特別是在js中,但我也想知道其他人)。如果我在任何地方都錯了,請糾正我。

回答

2

JS中的按位運算符很慢。與C相比真的很慢。原因是在JS中,所有數字都表示爲雙精度浮點數,因此要執行按位運算,運行時必須將它們轉換爲32位整數並返回。

這並不是說它們沒有用處。例如Node#compareDocumentPosition返回一個位掩碼,並且something.length >>> 0是獲得something的長度屬性的常用方法,或者如果length不是數字或NaN,則爲零。另外,a/b | 0是一個快速的方式來做Math.floor(a/b),假設ab是> = 0。

+0

不會'something.length || 0'也工作? – 2012-03-13 15:28:52

+0

對於未定義,null和NaN是的情況,但是對於不是數字的情況,也可以使用>>> 0。好點,我會編輯它。 – 2012-03-13 22:35:27

+0

[不要使用按位運算來代替'Math.floor'。它是不可讀的,並且在現代JS中沒有性能增益。](http://stackoverflow.com/q/10890486/201952) – josh3736 2012-06-12 16:20:47

3

某些按位運算符在某些情況下比算術運算符更快。很難優化Javascript,因爲瀏覽器,平臺和計算機模型之間的性能差別很大。

現代瀏覽器將Javascript代碼編譯爲本機代碼,因此有些關於編譯語言的內容也與Javascript相關。然而,有些關於編譯語言的內容在新處理器中越來越不準確。例如,不再考慮單個處理器操作的性能,因爲操作是並行運行的。你不會看到一個操作需要多少次循環,而是你可以在一個循環中執行多少次操作。

要確定一個特定的操作在Javascript中是否比另一個更快或更慢,您需要在各種計算機和瀏覽器上進行測試,並查看平均值,最佳情況和最壞情況。即便如此,您獲得的任何特定結果對於發佈的每個新瀏覽器版本都會越來越過時。

+0

謝謝,+1的很好的解釋。 – 0xc0de 2012-02-21 06:25:08