JS parseInt的一个大坑

2021-02-01  乐帮网

javascript

我们先了解下它的基本用法再说有哪几个坑。

基本语法:
parseInt(string [, radix])

string
要解析的值。如果此参数不是字符串,则使用ToString 抽象操作将其转换为一个参数。此参数中的前面空格将被忽略。
radix 可选的
表示2到36之间的整数,也就是m的n次方的m。注意-这不是 默认值10!如果该值不是Number类型,它将被强制为Number

返回值
从给定参数string返回解析后整数。

可能返回:NaN
(1)radix是小于2比或更大 36。
(2)string 不能转为数字时。

看完以上语法,我找到了一个坑
1、当转换字符为 "0x"开头时,它默认转为16进制。(这个还可以接受)
2、有些浏览器当字符串以“0”开头时就以8进制进行解析了。(这个杀伤力太大)

第二点巨坑,为什么这么说呢?还要结合一下它的别一条规则:parseInt的第一个参数允许为数字和非数字的组合,解析过程将从左到右开始直到截取取的字符不可转为数字为止,将忽略前置和尾随空格。

这样的情况下请你猜一下以下几行的输出是什么?

console.log(parseInt('0e0'));
console.log(parseInt('0810'));
console.log(parseInt('a0));

没有错新的浏览器都是输出如下:

0
810
NaN

但是有一个例外,就是IE8以及IE8以下输出是

0
0
NaN

它们把“0”开头时就以8进制进行解析了,所以第一个毫无疑问,都是0,第二个就有差异了。第三个是佐证的是从左到右的解析过程。

最终总结:

老铁们,以后使用parseInt 可得加上第二个参数呀例如:console.log(parseInt('0810',10)); 就妥妥的了。

链接

参考地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力