Javascript标准是否保证〜0的确定性结果?

时间:2018-01-23 10:49:24

标签: javascript

对不起,如果这是一个重复的问题;无法在任何地方找到答案。

Javascript标准是否保证~0的确定性结果?

Chrome为-1提供了<script>alert(~0);</script>

这个结果是否保证跨浏览器(以及一般的跨平台)?

2 个答案:

答案 0 :(得分:2)

The specification says

  
      
  1. 让expr成为评估UnaryExpression的结果。
  2.   
  3. 让oldValue为ToInt32(GetValue(expr))。
  4.   
  5. 返回对oldValue应用按位补码的结果。结果是带符号的32位整数。
  6.   

第一步实际评估表达式。第二步将表达式转换为32位整数。所有实现都应该正确实现。第三步只是翻转数字中的位。只有一种方法可以做到这一点。

所以我希望所有的实现都能给出相同的结果。

答案 1 :(得分:2)

是的,这是确定性的。来自bitwise NOT

的MDN文档
  

按位注意任何数字x都会产生-(x + 1)

这是因为按位运算符基于two's complement表示法。