16

不知何故,JavaScript 理解了按位运算 NaN ^ 1Infinity ^ 1甚至'a' ^ 1(全部计算为1)。

管理非数字的位运算符的规则是什么?为什么上面的所有示例都评估为1

4

2 回答 2

14

根据ES5 规范,在进行按位运算时,所有操作数都转换为ToInt32(首先调用ToNumber. 如果值为NaNor Infinity,则转换为0)。

因此:NaN ^ 1=> 0 XOR 1=>1

于 2012-06-14T16:58:20.373 回答
3

ECMA-262在 11.10 中定义二进制位运算符的参数使用 ToInt32 进行转换。解释 ToInt32 的 9.5 在其前两点中说:

  1. 令 number 为对输入参数调用 ToNumber 的结果。
  2. 如果 number 为 NaN、+0、-0、+Inf 或 -Inf,则返回 +0。
于 2012-06-14T17:04:58.830 回答