一些奇怪的情况下,JavaScript 能够以明确的方式处理非数字类型的按位运算符,例如 NaN ^ 1、Infinity ^ 1 以及 'a' ^ 1(它们都会计算为1)。 对于非数字类型,按位运算符的规则是什么?为什么上述所有示例都计算为1?
ECMA-262第11.10节定义了二进制位运算符的参数使用ToInt32进行转换。而9.5节解释了ToInt32,在其前两点中提到: 将输入参数调用ToNumber的结果赋给数字。 如果数字是NaN、+0、-0、+Inf或-Inf,则返回+0。
function bitwise(obj){ if (typeof o !== "Number") return 1; }
- gdoron:)
值得一提的是,结果取决于第二个操作数。例如:"A" ^ 2 === 2 // true
- gdoronNaN
**,因此"a" ^ 1 = 1
。 - Alexander/fndsjkn/ ^ 1 == 1
- gdoron