Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36267
  • 博文数量: 12
  • 博客积分: 1503
  • 博客等级: 上尉
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 12:16
文章分类

全部博文(12)

文章存档

2012年(1)

2011年(3)

2010年(2)

2009年(6)

我的朋友

分类: 系统运维

2011-12-31 10:42:19

项目开发人力真是紧张,搞得鄙都要来写写js. 现在学现卖

当用到字符串转为整型的时候,问题来了,如下
var k = parseInt("0041666987");  // k == 17334;

此时k并不是我想的0041666987,而是17334,真神奇

再打 parseInt("00416668")、parseInt("0041666823")等等 都是17334。 ???
原来js解析时把 在parseInt没有的指定数值基数时会自动判断第一个参数,发现它以0开头的认为他是一个8进制数,并从左到右一个字符一个字符的判断,当发现某些字符为非法的(单位在进制中非法)就舍弃后面所有位, 如parseInt("001")==1, parseInt("0018")==1, 所以就会出现上的 17334. 


parseFloat
  parseFloat解析的过程是也从参数str的第一个字符开始解析,如果第一个为非数字,返回NaN;如果为数字,继续解析,直到遇到非数字或解析完,并返回解析的数字。跟parseInt差不多,不同的它没有基数这个概念,默认都应该是认为是10进制。所以在parseFloat(0041666987)的情况它可以正常返回0041666987。

结论,当使用parseInt时, 在不明确第一个输入参数情况下,最好是指定基数,parseInt("0041666987", 10) == 41666987。

 

阅读(596) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~