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