Использование 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, чтобы получить числовое число
Ответ 3
Уровень - это переменная (и, следовательно, объект).
1 является литералом. Они не являются объектами, и переводчик думает о них совершенно по-другому.
http://www.cs.brown.edu/courses/bridge/1998/res/javascript/javascript-tutorial.html#4