Онлайн-курсы по JavaScript
Выбрать другой урок из курса
Обсуждение
Теория урока

Выражения присваивания в JavaScript

Вы уже хорошо знакомы с присваиванием (=) в JavaScript. Левым операндом должно быть левосторонние выражение: переменная, элемент массива или свойство объекта. А справа может быть все что угодно. Чаще всего оператор присваивания (=) используют отдельно от других операторов, но бывает и такое:

Пример 1
b = 10
(a = b) == 10 /* -> true */

Важно помнить, что оператор присваивания (=) имеет самый низкий приоритет среди операторов и поэтому скобки обязательны. Оператор присваивания имеет вот такую возможность:

Пример 2
a = b = c = 10 /* -> a, b, c = 10 */

Но здесь есть подводные камни. Этой возможностью нужно пользоваться прежде подумав. Например, вы напишите вот такой код:

Пример 3
var a = b = 10;

Видите ошибку? Согласен, ошибка не серьезная, но все же. В этой конструкции получается, что b не объявленная переменная, что не очень то и хорошо. Таких ошибок лучше не допускать, позже вы будете изучать функции и тогда все поймете. Лучше записывать так:

Пример 4
var a, b;
a = b = 10;

Вот пример кода, почему плохо не объявлять переменную и допускать подобные ошибки.

Пример 5
function myFunc() {
    var a = b = 10;
    document.write(a + '<br>');
    document.write(b + '<br>');
}
 
myFunc();
 
/*
 * JavaScript выведет 10, что категорически не допустимо
 * если вы пишите нормальный код
 * Все дело в области видимости, о которой вы узнаете позже
 * переменная b является глобальной (доступна в любой точке программы)
 */
document.write(b + '<br>');
/*
 * ошибка: переменная не объявлена
 * переменная a является локальной (доступна внутри функции)
 */
document.write(a + '<br>');

Другие присваивания

Об этом уже упоминалось. В JavaScript есть возможность присваивать с операцией (следующие две записи эквивалентны):

Пример 6
a += b;
a = a + b;

Разумеется есть не только операция +=

Пример 7
a += b; /* === */ a = a + b;
a -= b; /* === */ a = a - b;
a *= b; /* === */ a = a * b;
a /= b; /* === */ a = a / b;
a %= b; /* === */ a = a % b;
a <<= b; /* === */ a = a << b;
a >>= b; /* === */ a = a >> b;
a >>>= b; /* === */ a = a >>> b;
a &= b; /* === */ a = a & b;
a |= b; /* === */ a = a | b;
a ^= b; /* === */ a = a ^ b;
<
×
>
Не публикуйте свой код прямо в комментариях. Во-первых, он плохо отображается. Во-вторых, он может содержать для кого-то «спойлеры», т.е. ответы на практику. Воспользуйтесь специальными сервисами: cssdeck.com или jsfiddle.net.
Комментарии, содержащие код (пару строк не считается), будут безжалостно удаляться.