2013-05-11 488 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