2013-05-11 490 views
3

我读了一下按位JavaScript运算符here为什么'^ 9等于9?

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

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

''^9 
+0

感谢编辑@Rob W.我会在未来的小心。 – rajakvk 2013-05-11 10:21:29

回答

6

^是一个按位运算符操作带符号的32位整数。
如果一个操作数不是一个32位整数,它将被转换为一个有符号的32位整数。

ToInt32的行为在section 9.5 of the specification中定义为“让数字成为对输入参数调用ToNumber的结果。”。 ToNumber的细节被解释为here。实际上,ToNumber(x)相当于+x

然后,9.5继续:“如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。”。
9.5其余步骤可以归结为 “减去/添加2 直到结果在范围[-2 ,2 -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 
+1

优秀。令人信服的答案。谢谢。 – rajakvk 2013-05-11 10:05:10

4

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

+0

这个答案不完整。 '+'是**不是**转换为整数操作。所以,虽然答案似乎是合理的,但它缺少基本的中间步骤。 – 2013-05-11 09:49:54

+0

谢谢@Vitaliy Petrychuk。我试过+'不是'^ 9也是9,但+'不是'是NaN – rajakvk 2013-05-11 09:51:54

+0

“一些任意字符串”并不是一般意义上的数字。 – worenga 2013-05-11 09:54:30