探索JavaScript 中神奇的~~(雙波浪號)運算符
在JavaScript 冒險領域,你可能遇到過神秘的 運算子。乍一看,它類似於單一波形符號 ~,一個可靠的位元 NOT 運算子。這是否意味著 執行雙重 NOT,只是傳回相同的值?讓我們更深入地了解它的真正目的。
揭開真相
運算子的秘密在於它解釋運算元的方式。與單一波形符號不同, 將其輸入轉換為帶符號的 32 位元整數,即使它們是數字或字串。透過此轉換,它執行位元運算,有效地刪除小數點後的所有內容。
換句話說,該運算符的行為類似於以下函數:
<code class="javascript">function(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }</code>
但是,它只能正確工作對於-(231) 和2 31 - 1 之間的值,以避免溢位。
為什麼 ~~ 不是 NOT 中的 NOT
重要的是要了解 並不等同於應用兩次 NOT 運算。第一個 NOT 運算將這些位元反轉,而第二個 NOT 運算只是將它們再次反轉,從而得到原始值。相反,直接截斷數字的小數部分。
例如數字-43.2,用32位元二進位表示為:
<code class="binary">11111111111111111111111111010101</code>
應用~~後,它變成:
<code class="binary">11111111111111111111111111010101</code>
,翻譯回-43 。這表明 ~~ 有效地刪除了數字的小數部分。
注意事項
雖然~~ 對於將字串參數轉換為數字很有用,但它存在溢出風險非整數固有的不準確性使其成為一個冒險的選擇。考慮使用更簡單的方法,例如 x 或 Number(x)。
總之,~~ 是一個有趣的運算符,可以從數字或字串中截斷十進制值。透過了解其獨特的行為和限制,您可以在 JavaScript 冒險中負責任地利用它的力量。
以上是## JavaScript 中 ~~(雙波浪號)運算子的作用是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!