为什么JavaScript将parseInt(0000000101126)转换为33366而不是101126?
var example = parseInt(0000000101126);
console.log(example); //33366
答案 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解释器。
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类语言中,整数可以用多种方式表示:
这些parseInt中的每一个都将转换为十进制基数,因此您的八进制基数将转换为十进制。
答案 6 :(得分:0)
您必须将号码加入“号码”! parseInt()函数解析字符串并返回一个整数。 像这样:
var example = parseInt("0000000101126");
console.log(example);