【发布时间】:2014-02-10 05:56:57
【问题描述】:
5.5 | 0 === 5 是如何工作的?
| 0 在这种情况下是按位计算的OR 我怀疑它是吗?如果是这样,为什么它会在该点之后切断所有内容?
【问题讨论】:
-
@Cristy 在这种情况下,我不确定它是否重复,因为实际上看起来像这样的代码可能并不是真的试图简单地进行“地板”操作。当然,这实际上就是正在发生的事情。
标签: javascript
5.5 | 0 === 5 是如何工作的?
| 0 在这种情况下是按位计算的OR 我怀疑它是吗?如果是这样,为什么它会在该点之后切断所有内容?
【问题讨论】:
标签: javascript
| 执行运算符是按位或运算,将每个操作数隐式转换为 32 位整数。作为Pointy notes,5.5 | 0 === 5 被解析为5.5 | (0 === 5),其计算结果为5.5 | false。
…
5. 令 lnum 为 ToInt32(lval)。
6. 设 rnum 为 ToInt32(rval)。
7. 返回对 lnum 和 rnum 应用位运算符 @ 的结果。结果是一个带符号的 32 位整数。
而且由于 X | 0 → X 对于任何整数,它实际上只是删除了数字的任何小数部分。
【讨论】:
不等于真,只是不等于假。
5.5 | 0 === 5
返回
5
【讨论】:
(5.5 | 0) === 5 返回真
0 === 5是假的,被强制为0,然后5.5 | 0就是5。
5.5 | 0 === 5 为我返回5,而(5.5 | 0) === 5 返回true。我认为我们需要确认我们/问题所指的是哪种表达方式。
=== 运算符的优先级高于|,所以先进行比较。
( ) 的表达式,而 Yuriy 似乎试图用包含 ( ) 的表达式来说明一点,这显然是一个不同的表达式,不一定是什么被问及。如果( ) 表达式在这里有一点意义,我没有看到它。
位运算符总是将操作数强制为 32 位整数。
操作被解释为
5.5 | (0 === 5)
这是
5.5 | false
这是强制的
5.5 | 0
现在5.5 被转换为 32 位整数,所以我们有
5 | 0
这是5。
关系运算符比位运算符绑定得更紧密,这可能会造成混淆。如果要比较位运算符的结果(与加法或乘法不同),则必须显式加括号。
【讨论】:
5.5 | 0 结果产生 5 并且措辞很糟糕。
"foo"|"bar" 导致编译器错误。