On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 15.10.15 14:55. Заголовок: Причуды операторов JavaScript


Программисты которые приступают к изучению 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.



Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 10
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет