2014-12-03 24 views
0

有人能解釋爲什麼我們在JavaScript中獲得以下結果嗎?JavaScript拼圖:無法理解JavaScript中的parseInt結果

parseInt ('a' , 24) === 24 ; 
>false 
parseInt ('a' , 34) === 24 ; 
>false 
parseInt ('o' , 34) === 24 ; 
>true 
+2

這是因爲數字(對於基數大於10,與十六進制相同)用字母表示:'a' =='decimal 10','b' =='decimal 11' ... ...等等你可以在最後一行的34位寫上「o」,即十進制的24位 – blgt 2014-12-03 15:15:01

+0

[ES5 15.1.2.2](http://www.ecma-international.org/ecma-262/5.1/#sec-15.1 .2.2):*令* mathInt * [解析值]爲* Z * [輸入字符串]以*爲基數的符號表示的數學整數值,**使用字母'AZ'和'az '對於數值爲10到35的數字。**「 – apsillers 2014-12-03 15:28:41

回答

1

parseInt(string, radix);的第二個參數是一個介於2和36之間的整數,它表示第一個參數字符串的基數。

parseInt(string, radix);的返回值將是以指定基數中的數字形式表示的第一個參數的十進制整數表示形式。

現在,牢記這一點,如果你將它們轉換:

 Input   Output 

    a (base-24)  10 (base-10) 
    a (base-34)  10 (base-10) 
    o (base-34)  24 (base-10) 

所以,你可以在第三種情況下看到它出來是和賓果!你去那裏的條件是真的。

你可以使用任何在線工具從一個數字系統轉換到另一個像我用這一個:

http://extraconversion.com/base-number/base-34

希望這有助於!

+0

感謝用這樣一個簡單的術語來清除這個概念。還有一件事,你能告訴我,爲什麼二進制參數可以取值從2到36? – 2014-12-05 05:39:08

+1

一個數字系統是基於它代表數字的不同種類的符號。例如,如果你採用二進制,你只有兩個支持的符號'0'和'1'。因此,如果您從印度 - 阿拉伯數字(0,1,2,3,4,5,6,7,8,9)和拉丁字母(az)中選取所有符號,則最多可以有36個不同的符號代表這樣一個數字系統中的一個數字。這就是爲什麼Javascript函數parseInt最多支持36個基數的原因。 – 2014-12-05 08:32:15

+0

如果它回答你的問題,請將其標記爲你的答案,如果你願意,你可以將你的第二個問題作爲一個單獨的問題,以便人們可以在搜索結果中找到它。 – 2014-12-05 08:35:49

2

parseInt的第二個參數是基數。

在基數24或34中,'a'等於10,因爲它是字母表的第一個字母,所以它是在數字0-9之後使用的第一個數字。 'o'是字母表的第15個字母,所以它等於24的基數中有很多數字,就像你最後一個例子34.