为什么(〜(1 <&lt; 31))===〜(1&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 31)转换为字符串时它们不相等?

时间:2015-12-19 21:54:21

标签: javascript binary tostring bitwise-operators

在JS中:

(~(1 << 31)) === ~(1 << 31)
> true
(~(1 << 31)).toString(2) === ~(1 << 31).toString(2)
> false

这怎么可能?我认为===运算符是相同实体之间的严格比较?

2 个答案:

答案 0 :(得分:2)

事实证明,由于JS中的操作顺序,我没有比较确切的值:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

成员访问.toString()优先于按位运算符。糟糕!

答案 1 :(得分:1)

因为表达式的评估如下:

int