“5.5 | 0 === 5”如何工作?

时间:2014-01-20 21:33:33

标签: javascript

5.5 | 0 === 5如何运作?

在此上下文中,| 0是否为OR我怀疑它是什么?如果是这样,为什么它会在这一点之后切断一切?

3 个答案:

答案 0 :(得分:11)

按位运算符总是将操作数强制转换为32位整数。

该操作被解释为

5.5 | (0 === 5)

5.5 | false

被胁迫

5.5 | 0

现在5.5被转换为32位整数,所以我们有

5 | 0

5

关系运算符比按位运算符更紧密地绑定,这可能令人困惑。如果要比较按位运算符的结果(与添加或乘法不同),则必须明确括号。

答案 1 :(得分:4)

|执行运算符是按位OR运算,隐式地将每个操作数转换为32位整数。在Pointy notes时,5.5 | 0 === 5被解析为5.5 | (0 === 5),其评估结果为5.5 | false

根据specification

  

...
  5.让lnum成为ToInt32(lval)   6.让rnum为ToInt32(rval)。
  7.返回将按位运算符@应用于lnum和rnum的结果。结果是带符号的32位整数。

由于任何整数都是X | 0X,因此有效地删除了该数字的任何小数部分。

答案 2 :(得分:4)

它不等于真,它不等于假。

5.5 | 0 === 5 

返回

5