Программисты которые приступают к изучению
JavaScript и уже имеющие опыт программирования на других языках, могут быть удивлены, встретив такие причудливые операторы в
JavaScript, как
=== или
>>>.
Но даже уже знакомых с
JavaScript программистов может озадачить использование в этом языке операторов.
Вот один из таких забавных примеров.
Большинство правильно ответит, что выведет метод
alert в данном
HTML документе
<!DOCTYPE html />
<html>
<body>
<script>
var x = 5;
var y = '5';
alert(x + y);
</script>
</body>
</html>
Результатом будет строка
"55", так как оператор + в этом контексте действует как оператор конкатенации строк после неявного преобразования значения переменной
x в строку.
Ответить на данный вопрос не представляет большой сложности.
А что вы скажите относительно предложения
alert в данном
HTML документе?
<!DOCTYPE html />
<html>
<body>
<script>
var x = 5;
var y = '5';
alert(x ++ y);
</script>
</body>
</html>
Готовы вы дать верный ответ, не открывая этот документ в браузере?
Кто-то может даже засомневаться в своих знаниях
JavaScript и подумать, что он в свое время пропустил знакомство с оператором
++ Я вас успокою. Такого оператора в JavaScript нет.. Метод
alert в данном случае ничего не выведет, так как
JavaScript будет рассматривать лексему
++ в данном контексте как синтаксическую ошибку.
Дело в том, что данное выражение
JavaScript будет рассматривать оператор
++ как постинкриментный оператор, то есть выражение примет вид
x++ y
А это не бинарный оператор, а унарный оператор. Поэтому выражение не имеет смысла.
Хорошо, а что если поменять один из плюсов на минус в этой лексеме? Например,
<!DOCTYPE html />
<html>
<body>
<script>
var x = 5;
var y = '5';
alert(x +- y);
</script>
</body>
</html>
Первая мысль, которая может прийти в голову, что по аналогии с предыдущим примером такой лексемы, как
+- или
-+, в языке
JavaScript нет.
Однако в данном случае
JavaScript рассматривает эту конструкцию не как одну лексему, а как две лексемы.
Конструкция
+- в данном случае интерпретируется как бинарный
+ и унарный
-. А конструкция
-+ рассматривается как бинарный
- и унарный
+.
В обоих случаях строка будет неявно преобразована к числу, и в результате будет получено
0, независимо от того используется
+- или
-+.
.
А что если вместо двух знаков +, как это было раньше, записать три знака +?
<!DOCTYPE html />
<html>
<body>
<script>
var x = 5;
var y = '5';
alert(x +++ y);
</script>
</body>
</html>
И в этом случае код будет корректным, а метод
alert выведет
55, так как опять-таки числовое значение
x преобразуется в строку.
Выражение
x +++ y эквивалентно выражению
x++ + y.