论坛首页 Web前端技术论坛

javascript的parseInt的一个问题

浏览 9204 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-29  
现有一字符串数组如下:
01
02
........
010
011
......
020
021
......
使用javascript的parseInt()函数来处理,得到的结果非常令人震惊!如parseInt("07")返回7
01-07:返回正确的值。08-09,返回0;
010返回8,011返回9,017返回15,018-019,返回1;
020返回16,021返回17,027返回23,028-029,返回2;
依此类推
震惊!咋回事???

parseFloat()是正常的。

   发表时间:2006-11-29  
你先仔细研究JavaScript的参考手册后,再作结论。
0 请登录后投票
   发表时间:2006-11-29  
0开头的是8进制字符串,08-09都是无效的8进制字符串,所以后面的无效字符都不解析。
0 请登录后投票
   发表时间:2006-11-30  
是我太急躁了,刚看过了手册,但我仍然认为这是javascript需要改进的一个问题。
0x被认为是16进制,这也是c/java里的约定。但是08,09这样的字符串,不应该被认为是8进制数据吧?还有哪种语言是这样约定的呢?像basic中Cint("08")和java中parseInt("08")都是返回8的。

而且从语义上来说,parseInt应该是返回一个整型,而parseFloat是返回浮点型。像“08”这样的字符串,自然而然的,我不希望使用parseFloat去解析。

发现这个纯属偶然。对类似2006-08-09这样的字符串进行日期判断的时候发现的。
0 请登录后投票
   发表时间:2006-11-30  
together 写道
是我太急躁了,刚看过了手册,但我仍然认为这是javascript需要改进的一个问题。
0x被认为是16进制,这也是c/java里的约定。但是08,09这样的字符串,不应该被认为是8进制数据吧?还有哪种语言是这样约定的呢?像basic中Cint("08")和java中parseInt("08")都是返回8的。

而且从语义上来说,parseInt应该是返回一个整型,而parseFloat是返回浮点型。像“08”这样的字符串,自然而然的,我不希望使用parseFloat去解析。

发现这个纯属偶然。对类似2006-08-09这样的字符串进行日期判断的时候发现的。

有道理,看来俺也得学习一下javascript技术手册了!
0 请登录后投票
   发表时间:2006-11-30  
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Functions:parseInt

If the input string begins with "0x", the radix is 16 (hexadecimal).
If the input string begins with "0", the radix is eight (octal). This feature is deprecated.
If the input string begins with any other value, the radix is 10 (decimal).

0 请登录后投票
   发表时间:2006-11-30  
建议应该怎么样是另一回事啦,你用VB里的行为来猜测,自然会有一番折磨了.
Java跟C一样应该是正确的,毕竟是C-like的语言.

0 请登录后投票
   发表时间:2006-11-30  
Lucas Lee 写道
建议应该怎么样是另一回事啦,你用VB里的行为来猜测,自然会有一番折磨了.
Java跟C一样应该是正确的,毕竟是C-like的语言.

我可没有单纯的用vb中的cint来判断的。
java里的parseInt("09")同样是返回9的。
0 请登录后投票
   发表时间:2006-12-02  
使用eval
eval("09")==9
0 请登录后投票
   发表时间:2006-12-02  
8进制是以前的规范,用得比较少,我印象中似乎主要用于字符串中,跟在转义字符“\”后面。不能拿javascript和java比吧,它又不遵守java的标准。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics