对非数字的按位运算

时间:2012-06-14 16:52:25

标签: javascript operators bit-manipulation

不知何故,JavaScript理解bitwise operations NaN ^ 1Infinity ^ 1甚至'a' ^ 1(所有评估为1)。

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

2 个答案:

答案 0 :(得分:11)

根据ES5 spec,在执行bitwise operations时,所有操作数都会转换为ToInt32(首先调用ToNumber。如果值为NaNInfinity,它已转换为0)。

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

答案 1 :(得分:3)

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

  
      
  1. 设number是输入参数上调用ToNumber的结果。
  2.   
  3. 如果number为NaN,+ 0,-0,+ Inf或-Inf,则返回+0。
  4.