繁体   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