2014-01-21 47 views
5

为什么JavaScript将parseInt(0000000101126)转换为33366而不是101126?为什么JavaScript将parseInt(0000000101126)转换为33366而不是101126?

var example = parseInt(0000000101126); 
console.log(example); //33366 
+4

@MarkWalters这也打印33366 – CodingIntrigue

+3

@马克的*文字*'0000000000101126'已经被解释为八进制甚至打'parseInt'之前。 – deceze

+1

不要将值作为文字传递给'parseInt()',而应将其作为字符串传递:'parseInt('0101126',10);'http://jsfiddle.net/Nunners/VrYL4/1/ – Nunners

回答

2

JavaScript的假定:

•如果字符串以 “0x” 开始,基数是16(十六进制)
•如果字符串以 “0” 开始,基数是8(八进制)。此功能已被弃用
•如果字符串以其他任何值开头,基数是10(十进制)

0

如果parseInt值从0启动JavaScript引擎评估它像octal值。 但ECMAScript 5 removes八进制解释。

1

尝试把你的价值在引号,它会给你正确的输出:

相反的:

var example = parseInt(0000000101126); 

尝试

var example = parseInt("0000000101126"); 
+0

我无法明确写入parseInt(“0000000101126”),因为0000000101126来自循环中处理的数千个数据行中的一行。即使我首先将0000000101126放入一个变量并使用example.toString()将其转换为字符串,它仍会返回33366 – Jonathan

+1

@Jonathan您可以使用生成parseInt(010126)的代码发出另一个问题,以表示问题(解释数字作为八进制),你可以得到一个解决方案。你目前的问题似乎仅限于找出为什么这种正确的行为正在发生,而不是如何解决你的问题。 – Tibos

+0

@DownVoter downvoting的原因将不胜感激。 – Bhushan

0

这是因为它被转化为Octal

parseInt()函数解析字符串并返回一个整数。

基数参数用于指定其中标号系统 使用,例如,16(十六进制)的一个基数表示该串中的 数量应该从一个十六进制数被解析到一个 十进制数为。 如果省略基数参数,JavaScript的假设:

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

诀窍是,它不是parseInt它解释你的电话号码为八进制,但JS解释。

This section ECMAScript描述了JS解释器如何解释源代码中的数字。 This one描述了八进制数的语法。

消除的八进制文字结果歧义在有趣的场景的一些overzelousness:

(铬32)

01.0 // SyntaxError: Unexpected number 
01.9 // SyntaxError: Unexpected number 
09.9 // 9.9 

(function(){"use strict"; 01;})() // SyntaxError: Octal literals are not allowed in strict mode. 
(function(){"use strict"; 01.0;})() // SyntaxError: Unexpected number 
(function(){"use strict"; console.log(09.9);})() // 9.9 

火狐26

01.0 // SyntaxError: missing ; before statement 
09.0 // SyntaxError: missing ; before statement 
09.9 // 9.9 

(function(){"use strict"; 01;})() // SyntaxError: octal literals and octal escape sequences are deprecated 
(function(){"use strict"; 01.0;})() // SyntaxError: octal literals and octal escape sequences are deprecated 
(function(){"use strict"; 09.9;})() // SyntaxError: octal literals and octal escape sequences are deprecated 
0

在C型语言整数可以用多种方式表示:

  • 如ocatl数通过将0在前面0101126
  • 为十进制通过将在氟利昂101126
  • 没什么作为十六进制数通过将0X在前面 0x101126

每个parseInt函数的将转换为十进制基数,所以你的八进制基数被转换为十进制。

0

你必须把数字放入“数字”! parseInt()函数解析一个字符串并返回一个整数。 像这样:

var example = parseInt("0000000101126"); 
console.log(example); 
相关问题