[英]Why does the radix for JavaScript's parseInt default to 8?
在JavaScript的parseInt函數中將基數默認為8(如果字符串以0開頭)讓我煩惱,只因為我繼續忘記將可選的第二個參數傳遞為10.我正在尋找答案告訴我為什么它有意義默認為8。
如果輸入字符串以0開頭,它只“默認”為8.這是來自C和C ++的不幸遺留物。
您可以使用Number('0123')
,或者,正如您在問題中所說, parseInt('0123', 10)
。
我如何解決JavaScript的parseInt八進制行為?
你能告訴我更多有關這種結轉的信息嗎?
如果數字以0
開頭並且包含0到7之間的數字(包括0和7),則它被解釋為八進制數字(基數為8而不是10)。
但是,在parseInt中,如果一個字符串以0
開頭,它總是以八進制形式插入,並在遇到無效字符時停止搜索(例如數字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
我個人更喜歡這種方法,並且相信它比調用函數更快。
現在,幾年后, parseInt()
似乎可以正常使用從0
開始的數字。 當前瀏覽器:
parseInt("019"); // 19 on Firefox 67
parseInt("019"); // 19 on Chrome 75
parseInt("019"); // 19 on Safari 12
parseInt("019"); // 19 on IE 11
parseInt("019"); // 19 on Edge 42
但是,這個“修復”必須打破依賴於parseInt("019")
返回1
或0
而不是19
舊腳本...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.