精华帖 (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()是正常的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-29
你先仔细研究JavaScript的参考手册后,再作结论。
|
|
返回顶楼 | |
发表时间:2006-11-29
0开头的是8进制字符串,08-09都是无效的8进制字符串,所以后面的无效字符都不解析。
|
|
返回顶楼 | |
发表时间: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这样的字符串进行日期判断的时候发现的。 |
|
返回顶楼 | |
发表时间: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技术手册了! |
|
返回顶楼 | |
发表时间: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). |
|
返回顶楼 | |
发表时间:2006-11-30
建议应该怎么样是另一回事啦,你用VB里的行为来猜测,自然会有一番折磨了.
Java跟C一样应该是正确的,毕竟是C-like的语言. |
|
返回顶楼 | |
发表时间:2006-11-30
Lucas Lee 写道 建议应该怎么样是另一回事啦,你用VB里的行为来猜测,自然会有一番折磨了.
Java跟C一样应该是正确的,毕竟是C-like的语言. 我可没有单纯的用vb中的cint来判断的。 java里的parseInt("09")同样是返回9的。 |
|
返回顶楼 | |
发表时间:2006-12-02
使用eval
eval("09")==9 |
|
返回顶楼 | |
发表时间:2006-12-02
8进制是以前的规范,用得比较少,我印象中似乎主要用于字符串中,跟在转义字符“\”后面。不能拿javascript和java比吧,它又不遵守java的标准。
|
|
返回顶楼 | |