Почему я не могу получить доступ к свойству целого числа с одной точкой?

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

3.toFixed(5)

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

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

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

Ответ 1

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

(3.)toFixed(5)

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

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

(3).toFixed(5)

Ответ 2

Вы не можете получить к нему доступ из-за недостатка в токенизаторе 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.

Ответ 3

Это не работает, потому что JavaScript интерпретирует 3. как начало константы с плавающей запятой (например, 3.5), или всю константу с плавающей запятой (с 3. == 3.0), поэтому вы не может следовать за ним идентификатором (в вашем случае - именем свойства). Он не понимает, что вы хотели бы, чтобы 3 и . были двумя отдельными токенами.

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