回答
這是一個unsigned right shift operator。有趣的是,它是唯一的bitwise operator,它是在JavaScript中的無符號的。
>>>運算符將expression1的位右移表達式2中指定的 位的位數。零點從左側填充。 丟棄右移的位數。
>>>
是一個按位運算符,zero-fill right shift。
我認爲>>> 0
對正數的唯一影響是舍入到最接近的整數,與Math.floor()
相同。我不明白爲什麼在你的例子中這將是必要的,因爲通常.length
屬性(例如Array
)已經是一個整數。
我也看到了略短於~~
的用法:~~9.5 == 9; // true
。
我懷疑它是否與用於負數的Math.abs()相同。 –
如果你在負數上做'>>> 0',它將它轉換成2的恭維,然後進行右移。因此'-14 >>> 0 == 1073741820'。(http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx) –
@AlKepp - 燁,我看到了錯誤,並修復它 - 應該先測試,但這顯然是一個快速繪製的問題:)。 – nrabinowitz
該運算符是一個邏輯右移。這裏的數字是移位0位。數學上的零位移位應該沒有效果。
但是在這裏它用於將值轉換爲無符號的32位整數。
忽視了其本意,這是最有可能在那裏你會看到它使用:
>>> 0
的獨特之處在於它是將任何類型轉換爲正整數的唯一運營商:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
在你的榜樣,var len = this.length >>> 0
,這是得到一個整數長度使用遍歷this
,無論何種類型this.length
可能的一種方式。
同樣,~~x
可用於任何可變轉換爲符號整數。
你能解釋如何使用'>>>'來迭代嗎? – K48
@ K48我不認爲他的意思是* iterate *,我認爲他的意思是說這會迫使其成爲一個數字。 (否則,我同樣困惑。)但這是一個很好的答案,闡明更多:https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use-它 –
- 1. Javascript等於三倍等於但大於和小於?
- 2. 強大的形式與WordPress的三倍
- 3. Android Studio中三倍大的位圖
- 4. 爲什麼芝麻限於150m三倍?
- 5. 問題增加三倍於rdflib.store.IOMemory
- 6. JavaScript函數在字符串中的每個兩倍或三倍的話
- 7. 的JavaScript的insertBefore沒有更新 - 需要雙倍或三倍點擊
- 8. 使用大於long的數字加倍
- 9. 的Javascript ===(三聯等於)
- 10. 最長的連續子序列,使零的數目的兩倍小於等於三倍的數目
- 11. JavaScript三等於和三變量比較
- 12. 乘以2大於長雙倍的最大限制的數字
- 13. 分倍慢於倍數?
- 14. 呼叫cron的兩倍或三倍有時
- 15. sql server服務器結果的兩倍和三倍
- 16. 的Javascript三重比PHP更大
- 17. Android Studio:png文件的三倍選擇
- 18. 循環的三倍增長順序
- 19. drawRect大小的兩倍
- 20. 最大的偶數倍
- 21. 功能被稱爲兩倍或三倍時間
- 22. Javascript大於或小於
- 23. 字符大於/小於// javascript
- 24. 的OnClientClick倍數JavaScript調用
- 25. 精準雙倍差於雙倍
- 26. 爲什麼雙倍「==」和「等於」雙倍?
- 27. 常量作爲主題在SPARQL三倍
- 28. 字典存儲對。誰儲存三倍?
- 29. 什麼是十億三倍挑戰?
- 30. 子查詢返回據說大於1倍的值
這是一個右移操作符,但爲什麼你會右移零?這是一種'parseInt'的廉價方式嗎? –
'>>>'總是將符號位設置爲零,即使您移位了零位。 –
檢查這個答案關於*爲什麼他們在這種情況下使用'>>>'操作符:http://stackoverflow.com/questions/3081987/what-good-does-zero-fill-bit-shifting-by-0 -do-a-0/3082073#3082073 – CMS