【发布时间】:2012-06-17 18:20:44
【问题描述】:
不知何故,JavaScript 可以理解 bitwise operationsNaN ^ 1、Infinity ^ 1 甚至 'a' ^ 1(全部计算为 1)。
管理非数字的位运算符的规则是什么?为什么上面所有的例子都评估为1?
【问题讨论】:
标签: javascript operators bit-manipulation
不知何故,JavaScript 可以理解 bitwise operationsNaN ^ 1、Infinity ^ 1 甚至 'a' ^ 1(全部计算为 1)。
管理非数字的位运算符的规则是什么?为什么上面所有的例子都评估为1?
【问题讨论】:
标签: javascript operators bit-manipulation
根据ES5 spec,在做bitwise operations时,所有操作数都转换为ToInt32(先调用ToNumber,如果值为NaN或Infinity,则转换为0 )。
因此:NaN ^ 1 => 0 XOR 1 => 1
【讨论】:
function bitwise(obj){ if (typeof o !== "Number") return 1; }
:) 值得一提的是,结果取决于第二个操作数。示例:"A" ^ 2 === 2 // true
NaN然后"a" ^ 1 = 1
/fndsjkn/ ^ 1 == 1
ECMA-262 在 11.10 中定义二进制位运算符的参数使用 ToInt32 进行转换。解释 ToInt32 的 9.5 在其前两点中说:
- 令 number 为对输入参数调用 ToNumber 的结果。
- 如果数字是 NaN、+0、-0、+Inf 或 -Inf,则返回 +0。
【讨论】: