#javascript
#javascript
Вопрос:
js> (5).toString(2)
101
js> 5.toString(2)
js: "<stdin>", line 53: missing ; before statement
js: 5.toString(2)
js: ..........^
js>
Ответ №1:
Javascript предполагает (странно), что число, за которым следует точка, означает, что точка является десятичной точкой. Это нелогично, но, по крайней мере, надежно.
У вас есть несколько вариантов того, как вы справляетесь с этим:
(5).toString(2); #1
5..toString(2); #2
5.0.toString(2); #3
5 .toString(2); #4
Подсветка синтаксиса Stackoverflow показывает, что в # 2 и # 3 первая точка считается частью числа, а вторая — оператором. В # 4 мы можем видеть, что пробел сообщает анализатору, что число закончилось.
Ответ №2:
Потому что без круглых скобок точка в 5.toString()
интерпретируется как десятичная точка. Без круглых скобок интерпретатор интерпретирует эту последовательность символов как литерал с плавающей запятой.
Комментарии:
1. Из любопытства, делать
5 .toString(2)
,5.0.toString(2)
и5..toString(2)
работать?
Ответ №3:
В Javascript числа могут быть с плавающей запятой, поэтому 5.0
это допустимое число. Когда вы используете 5.toString
, похоже, что toString
это дробная часть числа. Анализатор Javascript не обрабатывает этот случай.
Некоторые другие языки (такие как Ruby) обрабатывают это по-другому.
Ответ №4:
Интерпретатор сначала пытается разобрать .
как десятичную точку, таким образом, он ожидает, что toString
это будет цифра. Обратите внимание, что следующее работает, поскольку оно уже получило десятичное:
js> 5.0.toString(2); // -> "101"