为什么在JavaScript中以下结果为false:
10 === 000000010 (false)
Run Code Online (Sandbox Code Playgroud)
但结果如下:
010 === 000000010 (true)
Run Code Online (Sandbox Code Playgroud)
在所有情况下左右都是10,他们应该都是真的,不应该吗?
Pet*_*son 23
以前导0s后跟任何数字开头的JavaScript编号01234567是八进制(基数为8)而不是十进制(基数为10).
你可以在这样的例子中看到这个:
10 === 010 // false
8 === 010 // true
Run Code Online (Sandbox Code Playgroud)
请注意,如果有一个8或9数字,则它不是有效的八进制数,因此将被解释为十进制数:
89 === 089 // true
Run Code Online (Sandbox Code Playgroud)
请注意,八进制文字在严格模式下不起作用:
(function(){ "use strict"; return 010 === 10; })()
// SyntaxError: Octal literals are not allowed in strict mode.
Run Code Online (Sandbox Code Playgroud)
这在JavaScript规范的B.1.1节中描述为与旧版ECMAScript兼容的非规范行为.八进制整数文字定义如下:
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)
您当前的示例无法承受,前缀为0仅包含数字0-7的数字将被解释为八进制.一个更好的例子是
123 == 0123 // nope
Run Code Online (Sandbox Code Playgroud)
因为0123在基地10是83.
使其与您更新的示例一致
parseInt(10, 10) // 10
parseInt(000000010, 10) // 8
parseInt(010, 10) // 8
Run Code Online (Sandbox Code Playgroud)