parseInt在IE8下的异常

2017年07月13日Web前端

在改bug时,偶遇使用parseInt的一个小问题。

一、问题内容

if (parseInt(str) == num) {
    // ...
}

代码中的大意是这样的,这个bug是提在IE8下,定位时并没有快速定位到parseInt上,直到打印结果才发现此处有问题。

当str是'08'时,parseInt的结果居然是0,所以出现了问题。

尝试发现,在IE8下'08'、'09'都会变成0。是因为,以0开头的数字型字符串在转化时,IE8会识别成八进制,0x会被识别为十六进制。因为八进制下8和9是不存在的,所以返回了0。

此时的处理方式可以为:

parseInt('08', 10);   // 8
parseInt('010', 10);  // 10