簡體   English   中英

為什么JavaScript的parseInt的基數默認為8?

[英]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八進制行為?


你能告訴我更多有關這種結轉的信息嗎?


注意: ECMAScript嚴格模式刪除八進制語法。

如果數字以0開頭並且包含0到7之間的數字(包括0和7),則它被解釋為八進制數字(基數為8而不是10)。

但是,在parseInt中,如果一個字符串以0開頭,它總是以八進制形式插入,並在遇到無效字符時停止搜索(例如數字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

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

現在,幾年后, 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")返回10而不是19舊腳本...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM