Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: number, literal

Почему 5.toString() не работает, но 5..toString() работает?

Вопрос проверяет понимание синтаксиса JavaScript и различий между парсером языка и механизмом автоупаковки.

Короткий ответ

5.toString() не работает, потому что JavaScript воспринимает точку как часть числового литерала. В результате парсер “ждёт” дробную часть числа, а не вызов метода. Вариант 5..toString() работает, потому что первая точка завершает число, а вторая используется для доступа к методу. После этого число временно оборачивается в объект Number, и метод успешно вызывается.

Длинный ответ

Определение

Числовой литерал — это способ записи числа прямо в коде (5, 3.14, 10).

В чём проблема с 5.toString()

Сначала опишем, как это видит парсер.

  1. Запись:

    5.toString()
    
  2. Парсер читает это как:

    • начало числа 5.

    • ожидание дробной части

  3. В итоге возникает синтаксическая ошибка

Почему 5..toString() работает

Здесь поведение другое:

  1. Первая точка завершает число:

    5.
    
  2. Вторая точка — оператор доступа к свойству

  3. Далее срабатывает автоупаковка:

    • создаётся временный Number

    • метод берётся из Number.prototype

console.log(5..toString()); // "5"

Альтернативные корректные способы

Есть несколько читаемых и безопасных вариантов:

  1. Через скобки:

    (5).toString();
    
  2. Через переменную:

    const n = 5;
    n.toString();
    
  3. Через Number:

    Number(5).toString();
    

Практический вывод

  1. 5..toString() — допустимо, но выглядит странно

  2. На практике используют скобки или переменную

  3. Важно понимать, что проблема здесь в синтаксисе, а не в отсутствии метода

Вывод

5.toString() не работает из-за правил разбора числовых литералов, а 5..toString() работает, потому что явно отделяет число от оператора доступа к методу и позволяет автоупаковке выполнить свою работу.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#number

#literal

Подпишись на React Developer в телеграм