Почему я должен переносить число для вызова его методов?

#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"