2011-04-08 37 views

回答

17

如果輸入字符串以0開頭,它只會「默認」爲8,這是來自C和C++的一個不幸遺留。

您可以改爲使用Number('0123'),或者如您在問題中所述,使用parseInt('0123', 10)

How do I work around JavaScript's parseInt octal behavior?


你能告訴我更多關於此結轉?


注:ECMAScript strict mode removes octal syntax.

+0

你能告訴我更多關於這個殘留物嗎? – 2011-04-08 20:23:41

+0

是的。這是愚蠢的,邪惡的,糟糕的,令人討厭的 - 一個設計得不好的「功能」,完全是因爲以前的語言做到的。 – 2011-04-08 20:26:26

+2

單元'+'是比使用'Number'更好的選擇。一元'+'忽略八進制格式(但仍然支持十六進制格式)並且比函數調用更快。 – Reid 2011-04-08 20:55:26

5

如果許多具有0開始幷包含之間(且包括)的數字0至7,則它被解釋作爲一個八進制數(以8爲基數而不是10)。

在parseInt函數然而,如果字符串與0開始它總是interpeted爲八進制,而當它遇到了無效的字符停止搜索(例如數字89或類似z的字符)。

parseInt("070");  //56 
parseInt("70");  //70 
parseInt("070", 10); //70 
parseInt("78");  //78 
parseInt("078");  //7, because it stops before 8 

如果你需要一個字符串轉換成一個數字,你確定它不包含無效字符或小數部分,你可以用1乘以它做了一些它:

1 * "070";   //70 

我個人比較喜歡這種方法,並且認爲它比調用函數更快。

+0

至少在Chrome中,'parseInt'實際上並不那麼聰明。 'parseInt('019')'返回'1','parseInt('09')'返回0。 – 2011-04-08 20:24:17

+2

對於那些不明白Matt Ball在說什麼的人,提交的第一個答案只包含第一段。 – Lekensteyn 2011-04-08 20:28:35

相關問題