Ответ 1
Номера JavaScript, начинающиеся с ведущего 0
, за которым следует любая из цифр 01234567
, восьмеричная (база 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 спецификации JavaScript как ненормативное поведение для совместимости со старыми версиями ECMAScript. Циклический целочисленный литерал определяется следующим образом:
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7