写在最前
本次分享一下并不是很常用的按位非运算符~的原理以及一点点用法。
欢迎关注我的博客,不定期更新中——
JavaScript小众系列开始更新啦
——何时完结不确定,写多少看我会多少!这是已经更新的地址:
- 小众系列之按位非运算符:JavaScript中奇特的~运算符
- 小众系列之终极类型转换:从hello world看JavaScript隐藏的黑魔法制
- 小众系列之隐式类型转换:从[] == ![]看隐式强制转换机制
- 小众系列之事件循环:从HTML5与PromiseA+规范来看事件循环
这个系列旨在对一些人们不常用遇到的知识点,以及可能常用到但不曾深入了解的部分做一个重新梳理,虽然可能有些部分看起来没有什么用,因为平时开发真的用不到!但个人认为糟粕也好精华也罢里面全部蕴藏着JS一些偏本质的东西或者说底层规范,如果能适当避开舒适区来看这些小细节,也许对自己也会有些帮助~文章更新在我的博客,欢迎不定期关注。
~的规则是什么
看下规范里面的定义的~:
产生式 UnaryExpression : ~ UnaryExpression 按照下面的过程执行:
令 expr 为解释执行 UnaryExpression 的结果。
令 oldValue 为 ToInt32(GetValue(expr))。
返回 oldValue 按位取反的结果。结果为 32位 有符号整数。
总结一下即将数字进行抽象Toint32操作,再进行按位取反。那么再来看下关于Toint32:
数字进行Toint32操作会转化成32位有符号数,第一位为符号位,后面31位为表示整数数值。最后对数字进行按位取反即可得到~转换后的结果。