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

时间:2014-01-21 13:04:04

标签: javascript

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

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

7 个答案:

答案 0 :(得分:2)

JavaScript假定以下内容:

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

答案 1 :(得分:1)

尝试将您的值放在引号中,它会为您提供正确的输出:

而不是:

var example = parseInt(0000000101126);

尝试

var example = parseInt("0000000101126");

答案 2 :(得分:0)

如果parseInt值从0开始,javascript引擎会将其评估为octal值。 但ECMAScript 5 removes八进制解释。

答案 3 :(得分:0)

这是因为它被转换为Octal

  

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

     

radix参数用于指定要使用的数字系统   例如,使用16(十六进制)的基数表示   字符串中的数字应该从十六进制数解析为a   十进制数。   如果省略radix参数,则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)

答案 4 :(得分:0)

诀窍在于它不是parseInt,它将你的号码解释为八进制,而是JS解释器。

ECMAScript的

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

消除八进制文字模糊性的一些过分导致了有趣的场景:

(Chrome 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

Firefox 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

答案 5 :(得分:0)

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

  • 作为ocatl号,将0放在前面0101126
  • 以十进制表示 没有任何东西在fron 101126
  • 将0x放在前面作为十六进制数 0x101126

这些parseInt中的每一个都将转换为十进制基数,因此您的八进制基数将转换为十进制。

答案 6 :(得分:0)

您必须将号码加入“号码”! parseInt()函数解析字符串并返回一个整数。 像这样:

var example = parseInt("0000000101126");
console.log(example);