3

我在这里阅读了按位 JavaScript 运算符。

     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)

想知道下面的表达式是 9 吗?

 '' ^ 9 
4

2 回答 2

6

^是对有符号 32 位整数进行操作的按位运算符。
如果操作数不是 32 位整数,则将其转换为有符号的 32 位整数。

的行为在规范的第 9.5 节中ToInt32定义为“让 number 成为调用输入参数的结果。”。的细节在这里解释。实际上,相当于。ToNumberToNumberToNumber(x)+x

然后,9.5 继续:“如果数字是 NaN、+0、-0、+∞ 或 -∞,则返回 +0。”。
9.5 的其余步骤归结为“减去/添加 2 32直到结果在 [-2 31 , 2 31 -1] 范围内”。

适用于'' ^ 9

'' ^ 9
// ToInt32, step 1: ToNumber
0 ^ 9
// Bitwise XOR
9

适用于'string' ^ 9

'string' ^ 9
// ToInt32, step 1: ToNumber
NaN ^ 9
// ToInt32, step 2
0 ^ 9
// Bitwise XOR
9
于 2013-05-11T09:59:02.160 回答
4

''转换为数字。+'' === 00 ^ 9 = 9

于 2013-05-11T09:47:33.433 回答