Форум » WEB технологии и программирование » Причуды операторов JavaScript » Ответить

Причуды операторов JavaScript

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

Ответов - 0



полная версия страницы