Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
不知何故,JavaScript 理解了按位运算 NaN ^ 1,Infinity ^ 1甚至'a' ^ 1(全部计算为1)。
NaN ^ 1
Infinity ^ 1
'a' ^ 1
1
管理非数字的位运算符的规则是什么?为什么上面的所有示例都评估为1?
根据ES5 规范,在进行按位运算时,所有操作数都转换为ToInt32(首先调用ToNumber. 如果值为NaNor Infinity,则转换为0)。
ToInt32
ToNumber
NaN
Infinity
0
因此:NaN ^ 1=> 0 XOR 1=>1
0 XOR 1
ECMA-262在 11.10 中定义二进制位运算符的参数使用 ToInt32 进行转换。解释 ToInt32 的 9.5 在其前两点中说:
令 number 为对输入参数调用 ToNumber 的结果。 如果 number 为 NaN、+0、-0、+Inf 或 -Inf,则返回 +0。