不知何故,JavaScript理解bitwise operations NaN ^ 1
,Infinity ^ 1
甚至'a' ^ 1
(所有评估为1
)。
在非数字上管理按位运算符的规则是什么?为什么上面的所有示例都评估为1
?
答案 0 :(得分:11)
根据ES5 spec,在执行bitwise operations时,所有操作数都会转换为ToInt32
(首先调用ToNumber
。如果值为NaN
或Infinity
,它已转换为0
)。
因此:NaN ^ 1
=> 0 XOR 1
=> 1
答案 1 :(得分:3)
ECMA-262在11.10中定义了二进制位运算符的参数是用ToInt32转换的。而解释ToInt32的9.5在前两点说:
- 设number是输入参数上调用ToNumber的结果。
- 如果number为NaN,+ 0,-0,+ Inf或-Inf,则返回+0。
醇>