寫在最前
本次分享一下並不是很常用的按位非運算符~的原理以及一點點用法。
歡迎關注我的博客,不定期更新中——
JavaScript小衆系列開始更新啦
——何時完結不確定,寫多少看我會多少!這是已經更新的地址:
- 小衆系列之按位非運算符:JavaScript中奇特的~運算符
- 小衆系列之終極類型轉換:從hello world看JavaScript隱藏的黑魔法制
- 小衆系列之隱式類型轉換:從[] == ![]看隱式強制轉換機制
- 小衆系列之事件循環:從HTML5與PromiseA+規範來看事件循環
這個系列旨在對一些人們不常用遇到的知識點,以及可能常用到但不曾深入瞭解的部分做一個重新梳理,雖然可能有些部分看起來沒有什麼用,因爲平時開發真的用不到!但個人認爲糟粕也好精華也罷裏面全部蘊藏着JS一些偏本質的東西或者說底層規範,如果能適當避開舒適區來看這些小細節,也許對自己也會有些幫助~文章更新在我的博客,歡迎不定期關注。
~的規則是什麼
看下規範裏面的定義的~:
產生式 UnaryExpression : ~ UnaryExpression 按照下面的過程執行:
令 expr 爲解釋執行 UnaryExpression 的結果。
令 oldValue 爲 ToInt32(GetValue(expr))。
返回 oldValue 按位取反的結果。結果爲 32位 有符號整數。
總結一下即將數字進行抽象Toint32操作,再進行按位取反。那麼再來看下關於Toint32:
數字進行Toint32操作會轉化成32位有符號數,第一位爲符號位,後面31位爲表示整數數值。最後對數字進行按位取反即可得到~轉換後的結果。