2011-04-08 36 views

回答

17

如果输入字符串以0开头,它只会“默认”为8,这是来自C和C++的一个不幸遗留。

您可以改为使用Number('0123'),或者如您在问题中所述,使用parseInt('0123', 10)

How do I work around JavaScript's parseInt octal behavior?


你能告诉我更多关于此结转?


注:ECMAScript strict mode removes octal syntax.

+0

你能告诉我更多关于这个残留物吗? – 2011-04-08 20:23:41

+0

是的。这是愚蠢的,邪恶的,糟糕的,令人讨厌的 - 一个设计得不好的“功能”,完全是因为以前的语言做到的。 – 2011-04-08 20:26:26

+2

单元'+'是比使用'Number'更好的选择。一元'+'忽略八进制格式(但仍然支持十六进制格式)并且比函数调用更快。 – Reid 2011-04-08 20:55:26

5

如果许多具有0开始并包含之间(且包括)的数字0至7,则它被解释作为一个八进制数(以8为基数而不是10)。

在parseInt函数然而,如果字符串与0开始它总是interpeted为八进制,而当它遇到了无效的字符停止搜索(例如数字89或类似z的字符)。

parseInt("070");  //56 
parseInt("70");  //70 
parseInt("070", 10); //70 
parseInt("78");  //78 
parseInt("078");  //7, because it stops before 8 

如果你需要一个字符串转换成一个数字,你确定它不包含无效字符或小数部分,你可以用1乘以它做了一些它:

1 * "070";   //70 

我个人比较喜欢这种方法,并且认为它比调用函数更快。

+0

至少在Chrome中,'parseInt'实际上并不那么聪明。 'parseInt('019')'返回'1','parseInt('09')'返回0。 – 2011-04-08 20:24:17

+2

对于那些不明白Matt Ball在说什么的人,提交的第一个答案只包含第一段。 – Lekensteyn 2011-04-08 20:28:35

相关问题