Использование toString в JavaScript

Я читаю Douglas Crockford JavaScript: Хорошие части, и я нахожусь в точке, где он определяет функцию затухания. Часть этого кода сводится к следующему:

var level = 1;
var hex = level.toString(16);

Итак, я запустил это в своей консоли браузера, чтобы узнать, что я получаю....

var level = 1;
level.toString(16);

Эй, он возвращает "1"... Fabuloso! Вундербар!

Тогда, чтобы быть нахальным, я пытаюсь это увидеть, что я получаю...

1.toString(16);

И я получаю

SyntaxError: Неожиданный токен ILLEGAL

Что? Если level - переменная, равная 1, и выполнение этого метода на уровне отлично работает, то почему этот метод не работает на действительном числе 1? Я попробовал аналогичный эксперимент с методом toPrecision() и работал в обоих случаях отлично. Какая проблема здесь? Является ли это еще одним из тех присущих недостатков в реализации JavaScript, или я что-то упускаю? Я тестирую в Google Chrome.

Связанный: вопрос Почему число литералов не имеет доступа к методам Number?.

Ответ 1

Это просто ограничение грамматики языка.

Так как 1. является законным литералом (и 1.t нет), токенизатор разделит его на следующие токены:

1.
toString
(
)

И это незаконная последовательность токенов. Это object method вместо object . method.

В рабочих версиях в ответе @Joey скобки препятствуют тому, чтобы токенизатор обрабатывал точку как часть литерала числа, а не как отдельный токен, как пишет:

1.0.toString()

или

1..toString()

так как токенизатор знает, что вторая точка должна быть маркером сама по себе, а не частью литерала числа.

Ответ 2

Вам нужно 1..toString или (1).toString, чтобы получить числовое число