为什么在JavaScript中10 === 010导致错误

时间:2015-05-22 01:29:46

标签: javascript

为什么在JavaScript中,以下结果为false:

10 === 000000010 (false)

但结果如此:

010 === 000000010 (true)

在所有情况下左右都是10,他们应该都是真的不应该吗?

2 个答案:

答案 0 :(得分:23)

以前导0开头,后跟任意数字01234567的JavaScript编号为octal (base 8),而不是十进制(基数为10)。

你可以在这样的例子中看到这个:

10 === 010 // false
8 === 010 // true

请注意,如果有89数字,则它不是有效的八进制数,因此将被解释为十进制数字:

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中的012383

使其与更新后的示例一致

parseInt(10, 10) // 10
parseInt(000000010, 10) // 8
parseInt(010, 10) // 8