Почему ошибка 00.0 вызывает синтаксическую ошибку?
Это странно. Это то, что происходит на консоли JavaScript в Chrome (версия 42.0.2311.135, 64-разрядная версия).
> 0
< 0
> 00
< 0
> 0.0
< 0
> 00.0
X Uncaught > SyntaxError: Unexpected number
Firefox 37.0.2 делает то же самое, хотя его сообщение об ошибке:
SyntaxError: missing ; before statement
Вероятно, есть некоторые технические объяснения относительно того, как JavaScript анализирует числа, и, возможно, это может произойти только при манипулировании консольным приглашением, но все равно кажется неправильным.
Почему он это делает?
Ответы
Ответ 1
Выражения 0.0
и 00.0
анализируются по-разному.
-
0.0
анализируется как числовой литерал 1
-
00.0
анализируется как:
-
00
- восьмеричный числовой литерал 2
-
.
- свойство accessor
-
0
- имя идентификатора
Ваш код выдает синтаксическую ошибку, потому что 0
не является допустимым идентификатором JavaScript. Следующий пример работает, поскольку toString
является допустимым идентификатором:
00.toString
1Раздел 7.8.3 - Ведущему 0 может следовать десятичный разделитель или ExponentPart
2Раздел B.1.1 - Ведущий 0 может сопровождаться OctalDigits
Ответ 2
00
оценивается как восьмеричное число, а .0
оценивается как доступ к этому свойству number. Но так как целые числа не могут использоваться в качестве атрибутов свойств, ошибка возникает.
Вы получаете ту же ошибку для любого другого объекта:
'string'.0 // Syntax error: unexpected number
({}).0 // Syntax error: unexpected number
Вы можете найти соответствующую информацию об аксессуарах свойств на MDN.