23

我在 JavaScript 中摆弄按位运算符,我发现有一件事很了不起。

如果两个输入位之一是 ,则按位或运算符作为输出返回。所以这样做总是返回,因为没有效果:11x | 0x| 0

  • ( 1 | 0 ) === 1
  • ( 0 | 0 ) === 0

但是,当我计算 时Infinity | 0,我得到了0。这在我看来是令人惊讶的,因为通过上面的一个应该得到Infinity. 毕竟,( x | 0 ) === x

我在 ECMAscript 规范中找不到明确定义的地方,所以我想知道( Infinity | 0 ) === 0. 是不是可能Infinity是存储在内存中的方式?如果是这样,怎么可能仍然是执行| 0操作导致它返回0而不| 0应该执行任何操作?

4

2 回答 2

52

位运算符仅适用于整数。
Infinity是浮点值,而不是整数。

规范按位运算的所有操作数在执行操作之前都转换为整数(使用ToInt32操作)。

ToInt32操作说:

如果 number 为 NaN,则 +0、-0、+∞ 或 –∞ 返回 +0。

于 2011-07-11T12:30:30.497 回答
2

做数学和其他期望整数的运算NaN通常Infinity是一个坏主意。您将如何从Infinity设置/清除一点?

实际上,按位运算仅针对整数定义 - 整数没有NaNor Infinity

于 2011-07-11T12:30:56.663 回答