低版本IE的JavaScript中parseInt("08")和parseInt("09")返回0的原因和解决方法
2017-06-22 Shane Jhu
对于 parseInt("01") 到 parseInt("07"),都能得到正确的结果 (0-7),但如果是 parseInt("08") 或 parseInt("09") 则返回 0,这种现象出现在使用IE旧版本(IE8及之前)内核的浏览器中。
JavaScript 中 parseInt 的用法:
parseInt(s); parseInt(s, radix);
在这种环境下(IE8及之前内核),如果设置radix的值是0或者不设置时,会将 string 识别为:
以 "0x" 开头,parseInt() 会把 string 除0x外的其余部分当作十六进制数
以 "0" 开头,parseInt() 会把 string 除0外的字符当作八进制或十六进制数
以 1 ~ 9 的数字开头,parseInt() 将把它当作十进制数
所以这就是 parseInt("08") 和 parseInt("09") 返回 0 的原因,浏览器把它识别为八进制数,而八进制是没有 8 和 9 的。
解决办法:
parseInt(string, radix) 的作用是将 string 转换为整数,第二个参数是设置 string 的格式,常用的有2、8、10、16,表示要将 string 转换为多少进制的整数。
radix 可取值的范围是 2~36,如果不在这个范围内,将返回NaN。
parseInt("08",10); //返回数值8 parseInt("09",10); //返回数值9 parseInt("11",10); //将字符串"11"转换为十进制整数 parseInt("11",2); //将字符串"11"转换为二进制整数
经测试,在 IE10,Chrome 等新式浏览器中并未出现这种问题,但不能保证所有浏览器内核都会将字符串以十进制格式转换。至于需不需要养成在 parseInt 中带上 radix 参数的习惯,就需要各位在实际项目中体会了。
本文由lenashane.com原创,转载请注明出处:查看原文
如果觉得文章还不错,请点个赞吧