JavaScript的parseInt函數默認基數爲8(如果字符串以0開頭)會讓我很煩惱,這只是因爲我繼續忘記將可選的第二個參數作爲10傳遞。我正在尋找一個答案,告訴我爲什麼它會使意味着它默認爲8.爲什麼JavaScript的parseInt的基數默認爲8?
回答
如果輸入字符串以0開頭,它只會「默認」爲8,這是來自C和C++的一個不幸遺留。
您可以改爲使用Number('0123')
,或者如您在問題中所述,使用parseInt('0123', 10)
。
How do I work around JavaScript's parseInt octal behavior?
你能告訴我更多關於此結轉?
如果許多具有0
開始幷包含之間(且包括)的數字0至7,則它被解釋作爲一個八進制數(以8爲基數而不是10)。
在parseInt函數然而,如果字符串與0
開始它總是interpeted爲八進制,而當它遇到了無效的字符停止搜索(例如數字8
或9
或類似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
我個人比較喜歡這種方法,並且認爲它比調用函數更快。
至少在Chrome中,'parseInt'實際上並不那麼聰明。 'parseInt('019')'返回'1','parseInt('09')'返回0。 – 2011-04-08 20:24:17
對於那些不明白Matt Ball在說什麼的人,提交的第一個答案只包含第一段。 – Lekensteyn 2011-04-08 20:28:35
- 1. 你認爲parseInt(「08」)會返回什麼?
- 2. 爲什麼Python 3.2中的print()似乎默認爲UTF-8?
- 3. 爲什麼==和!=默認爲ValueType的object.Equals?
- 4. 爲什麼一切都不默認爲UTF-8?
- 5. 爲什麼不parseInt方法?
- 6. 爲什麼Rails中的默認編碼不是UTF-8?
- 7. 爲什麼jgit默認
- 8. 爲什麼不是默認
- 9. 爲什麼parseInt函數( 「08」)= 0,parseInt函數( 「07」)= 7
- 10. 爲什麼非默認參數不能遵循默認參數?
- 11. 在JavaScript:爲什麼parseInt(「08」)評估爲零,但parseInt(08)評估罰款?
- 12. 爲什麼默認的Spring Security策略是基於AffirmativeBased的?
- 13. SQL:具有「基本爲空」默認值的目的是什麼?
- 14. @RestController方法默認爲Transactional,爲什麼?
- 15. 爲什麼grails.views.default.codec默認爲「html」?
- 16. 爲什麼IBAction類型默認爲AnyObject?
- 17. 爲什麼Solr默認多值爲真?
- 18. 爲什麼print-circle默認爲零?
- 19. 李爲什麼默認爲換行符?
- 20. 爲什麼Reduux在Redux中默認稱爲默認值?
- 21. JavaScript中的parseInt行爲
- 22. 爲什麼parseInt(「123abcd」)和parseInt(「abcd123」)的結果在JavaScript中有所不同?
- 23. iscroll的默認行爲是什麼。
- 24. performDefaultHandlingForAuthenticationChallenge的默認行爲是什麼:?
- 25. 爲什麼要調用默認的aspx?
- 26. 爲什麼UIBarButtonItem默認是禁用的?
- 27. 爲什麼'infix`是默認的
- 28. ng-submit的默認行爲是什麼?
- 29. 的Makefile做:爲`默認」做沒什麼
- 30. mousedown的默認行爲是什麼?
你能告訴我更多關於這個殘留物嗎? – 2011-04-08 20:23:41
是的。這是愚蠢的,邪惡的,糟糕的,令人討厭的 - 一個設計得不好的「功能」,完全是因爲以前的語言做到的。 – 2011-04-08 20:26:26
單元'+'是比使用'Number'更好的選擇。一元'+'忽略八進制格式(但仍然支持十六進制格式)並且比函數調用更快。 – Reid 2011-04-08 20:55:26