Если я пытаюсь написать

3.toFixed(5)

, есть синтаксическая ошибка. Использование двойных точек, вставка пробела, помещение трех в круглых скобках или использование скобочных обозначений позволяет ему работать должным образом.

3..toFixed(5)
3 .toFixed(5)
(3).toFixed(5)
3["toFixed"](5)

Почему не работает одноточечная запись, и какую из этих альтернатив я должен использовать вместо этого?

Точка является частью числа, поэтому код будет интерпретироваться так же, как:

(3.)toFixed(5)

Это, естественно, приведет к синтаксической ошибке, поскольку вы не можете сразу следовать за номером с идентификатором.

Любой метод это предотвращает интерпретацию периода как части числа. Я думаю, что самый ясный способ — поставить круглые скобки вокруг числа:

(3).toFixed(5)

Вы не можете получить к нему доступ из-за недостатка в токенизаторе JavaScript. Javascript пытается разобрать точечная запись на число как литерал с плавающей запятой, поэтому вы не можете следовать за ним с помощью свойства или метода:

2.toString(); // raises SyntaxError

Как вы уже упоминали, есть несколько обходных путей, которые можно использовать для того, чтобы числовые литералы действовали как объекты. Любой из них одинаково действителен.

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first

Чтобы лучше понять использование и свойства объекта, ознакомьтесь с Javascript Garden Глядя на вывод

. Он не работает, потому что JavaScript интерпретирует 3. как начало константы с плавающей точкой (например, { *}) или же 3.5 целую константу с плавающей точкой (с ), поэтому вы не можете следовать за ней по идентификатору (в вашем случае, свойству-имени). Он не может распознать, что вы намеревались 3. == 3.0 быть двумя отдельными токенами. 3, но я не знаю, изменили ли они его. . Это двусмысленность в грамматике Javascript. Когда синтаксический анализатор получает несколько цифр, а затем встречает точку, у него есть выбор между «NumberLiteral» (например, 3.5) или «MemberExpression» (например, 3.foo). Я полагаю, что эта двусмысленность не может быть решена с помощью научных данных — следует ли интерпретировать

Любой из ваших обходных путей выглядит хорошо для меня.

как 3.e2? Поэтому они добровольно решили отдать предпочтение 300 или a property e2 of 3 здесь, просто потому, что на самом деле не очень большой спрос на такие вещи, как NumberLiteral php — форма внутри $ .load не публикуется правильно — переполнение стека 3.foo Глядя на вывод