Chrome更改parseInt默认转换规则 - 凡事预则立,不预则废

今天看到Chrome有更新,就升级了,目前最新稳定版本Chrome 25.0.1364.97 m,然后很高兴的发现之前的崩溃BUG居然已经修复了。

不过很显然新的问题又出来了,不然就不会有这么一篇文章了,下午在弄一个公司培训的PPT,里面需要写到parseInt的一个经典陷阱。

首先回顾一下parseInt(string, radix)当省略radix参数时,大致的解析过程:

  • string以0开头,且后面紧跟x时,按照parseInt(string, 16)处理

  • string以0开头,且后面紧跟非x时,按照parseInt(string, 8)处理

  • 其余统一按照parseInt(string, 10)处理

当然强烈建议始终使用radix参数

 

按照上面的解析规则,parseInt('010')很自然应该返回8 ,不过奇怪的是Chorme返回的居然是10,难道最新版Chrome改掉了以前默认的转换规则?

晚上回家又拿Chrome 24.0.1312.56试了一下,发现结果也是一样的(没有更早的版本了),看来Chrome改掉这个规则已经不是一两天了,不知其他浏览器会不会效仿。。。


最后趁着这赶脚,再稍微回顾一下parseIntparseFloat转换数字上的区别:

  • parseFloat只能转换10进制,而parseInt则支持第二个参数parseInt(string[, radix]),理论上支持任意进制的数字

  • parseInt不能转换科学计数parseInt('1e2');//1parseFloat('1e2');//100

  • parseInt无法转换省略小数点前面0的数字parseInt('.1');//NaNparseFloat('.1');//0.1

0评论

发表评论

最新评论及回复

    loading

最近发表

    loading

网站分类

    loading

文章归档

    loading

友情链接

Top Comments Footer