JavaScript标准是否保证~0的结果具有确定性?跨浏览器跨平台是否一致?
关于JavaScript中
~0结果确定性的解答 嘿,完全不用道歉,这是个很值得确认的问题!
答案是肯定的:JavaScript标准(ECMAScript)明确保证~0的结果在任何遵循标准的环境中都是-1,不管是浏览器还是其他JS运行平台(比如Node.js),结果都完全一致。
为什么会这样?
要搞清楚原因,得先理解JS里按位非操作符~的工作机制:
- 首先,操作数会被转换为32位有符号整数(这是ECMAScript标准强制规定的步骤)。对于
0来说,它的32位二进制表示就是全0:00000000 00000000 00000000 00000000。 - 然后对这个32位整数的每一位进行取反操作,全0就变成了全1:
11111111 11111111 11111111 11111111。 - 最后,这个取反后的32位值会被转换回JS的常规数字类型(64位浮点数)。而在32位有符号整数的补码规则里,全1的二进制正好代表
-1。
因为整个过程的每一步都被ECMAScript标准严格定义了,所以只要运行环境遵循标准,~0的结果就必然是-1,不会有平台或浏览器差异。你在Chrome里得到的-1,在Firefox、Safari、Edge,甚至Node.js等其他JS环境里都会是一样的结果。
内容的提问来源于stack exchange,提问作者goodvibration
相关产品推荐
相关产品推荐

