Вопрос по javascript – Каковы правила для вызова функций на числовых литералах в JS? [Дубликат]

5

This question already has an answer here:

Why can't I access a property of an integer with a single dot? 4 answers

Поскольку я начал работать с JS, я думал, что единственный способ вызвать функцию для числового литерала - это поместить ее в положение выражения, заключив ее в скобки, например, так:

1.toString();
// SyntaxError: identifier starts immediately after numeric literal

(1).toString();
// "1"

Сегодня мне пришло в голову попробовать это:

0.1.toString();
// "0.1"

Почему это работает? Указатель на официальную спецификацию был бы великолепен.

Edit Неоднозначность была моей первой мыслью, но потом решил, что нет никакой двусмысленности в1.toString() или. Это глубже, чем я думал, но я все еще думаю, что я прав. Вот почему:

Property names can begin with digits

var obj = { "1" : 1, "2" : 2 };

Property names that begin with digits can only be referenced with square brackets

obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1

Также:

1['toString']();
// '1'

Следовательно,1. после любого нецифрового всегда будет вызов метода или доступ к свойству, а не десятичное число. Точно так же,1. после любой цифры всегда будет десятичное число, а не вызов метода или доступ к свойству.

Ну, естьsmall неоднозначность вокруг "е" - это начало показателя или первая буква идентификатора? Рассматривать1.e10();Error: User Rate Limit Exceeded Pointy
как примечание, вы можете использовать1..toString()Error: User Rate Limit Exceeded.Error: User Rate Limit Exceeded zzzzBov
Связанные с:stackoverflow.com/q/2300197 CMS
Умно, спасибо zzzzBov и CMS. mwcz
Я не согласен с маркировкой этого дубликата. Вопрос содержит больше контекста, а выбранный ответ более высокого качества (включая ссылку на реальную спецификацию JavaScript, в которой определено это поведение). mwcz

Ваш Ответ

1   ответ
5

.Error: User Rate Limit Exceeded0.1затем. cannot быть частью числа.

Это все о двусмысленности.

editError: User Rate Limit Exceeded

The source character immediately following a NumericLiteral must not be an IdentifierStart or DecimalDigit.

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded0.1.toString()Error: User Rate Limit Exceeded mwcz
Error: User Rate Limit Exceeded.Error: User Rate Limit Exceeded.Error: User Rate Limit Exceeded mwcz
Error: User Rate Limit ExceededapparentError: User Rate Limit Exceeded0.1.toStringError: User Rate Limit ExceedednotError: User Rate Limit Exceeded.Error: User Rate Limit Exceeded

Похожие вопросы