lena和shane,家庭日志,xulavigne,Lena&Shane

如何实现

低版本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原创,转载请注明出处:查看原文

如果觉得文章还不错,请点个赞吧

8月 30 2020
太过信任,你或许会受骗,然而终日怀疑,你会饱受痛苦。

弗兰克•克莱恩 (Frank Crane 美国演员,导演)