Доброго времени суток, друзья!
В прошлом уроке мы с Вами стали гордыми обладателями информации о логических операндах AND (&&), OR (||) и NOT (!). Мы рассмотрели основные правила работы этих операндов, разобрали как именно JavaScript преобразует (неявным образом) типы переменных при работе этими логическими операндами и подтвердили всю эту информацию на практике.
Существует еще как минимум один момент в работе с логическими операндами. Этот момент - приоритетность. В прошлом уроке мы рассмотрели примеры, когда в работе присутствовал один логический операнд, или несколько одинаковых логических операндов, как например в этой записи alert(d || e || b);
, или вот в этой alert(b && a && f);
.
Однако в программировании Вы будете сталкиваться с ситуациями, когда Вам может потребоваться использовать комбинации логических операндов, например такую alert( 5 || 1 && 0 );
. Как мы видим, тут участвуют сразу два операнда: логический OR (||) и логический AND (&&).
Мы могли бы начать сегодняшний урок с рассмотрения комбинированных логических операндов. Но мое сугубо личное мнение заключается в том, что в связке с конструкциями if() {}
и if() {} else {}
(с которыми мы до сих пор не познакомились) комбинации логических операндов понять проще. Поэтому, пока, я предлагаю опустить тему с комбинациями и вернуться к ней немного позднее. Пока же Вам достаточно будет знать что записи вида alert( 5 || 1 && 0 );
тоже встречаются и комбинированное взаимодействие логических операндов никто не запрещал.
Ну а сегодня мы начнем с Вами рассматривать одни из наиболее многочисленных операторов для взаимодействия между переменными. Эти операторы носят название Assignment operators или Операторы присваивания
Начнем
УРОК 12. Другие возможные взаимодействия между переменными. Операторы присваивания.
Неподготовленного человека операторы присваивания на начальном этапе вполне могут сбить с толку. Не последнее почему это происходит - это их кодового представление.
Так выглядит полный список Операторов присваивания:
- = (Присваивание)
- += (Присваивание со сложением)
- -= (Присваивание с вычитанием)
- *= (Присваивание с умножением)
- /= (Присваивание с делением)
- %= (Присваивание по модулю)
- >>= (Присваивание с правым сдвигом)
- <<= (Присваивание с левым сдвигом)
- >>>= (Присваивание с беззнаковым сдвигом вправо)
- &= (Присваивание с побитовым AND)
- |= (Присваивание с побитовым OR)
- ^= (Присваивание с побитовым XOR)
Однако не спешите пугаться. Из приведенного списка выше нам с Вами достаточно будет первых пяти/шести. Специфические операторы присваивания, которые начинаются с седьмого пункта для нас, как для новичков в JavaScript, будут абсолютно бесполезны. Указали же мы их для общего знания. Чтобы в случае, если Вам вдруг "повезет" и вы когда-либо столкнетесь с записью, где будет фигурировать, к примеру вот такой >>>=
оператор, то знали, что двигаться требуется в направлении операторов присваивания... Но, думаю, такие случаи будут встречаться крайне редко.
Ну а касательно оставшихся операторов присваивания - нам вполне по силам с ними разобраться.
= (Присваивание).
Оператор присваивания самый первый из списка и уже известный нам оператор. В JavaScript Он используется для присвоения значений переменным. Другими словами, еще наша запись из урока о переменных, вот эта:
var box = "привет JavaScript!";
...уже являлась примером взаимодействия переменной. Только не переменной с переменной, а переменной с ее значением. Оператор присвоения = по сути своей простой, однако и его мы можем использовать в более широком плане, как например использовать его возможность так называемого цепного присваивания. Рассмотрим на примере:
var a = 1;
var b = 22;
var c = 13;
var d = 100;
a = b = c = d;
alert(a);
Выше, мы создали четыре переменных с разными значениями, а уже на строке 6 мы использовали оператор присвоения =, вернее его цепное присваивание. В этом случае переменной a
, (значение которой до оператора была равно 1) будет присвоено значение последнего участника цепного присвоения, то есть значение переменной d
равное 100.
Более того, переменным расположенным в середине этого цепного присвоения также будет присвоено значение самого последнего из участников - переменной d
. При желании, можете вывести значения всех переменных и убедится в этом.
Очевидно, что мы рассмотрели пример с переменными типа Number (Число). Но такое поведение оператора присвоения = будет выполняться для любой комбинации переменных с любыми типами. Например, код вида:
var a = false;
var b = 'голос - сила, а сила голоса - мощь';
var c = undefined;
var d = 100;
c = d = a = b;
alert(a);
... присвоит всем нашим переменных значение со строкой "голос - сила, а сила голоса - мощь", так как переменная b
была последней в цепочке работы оператора присвоения =.
Присваивание со сложением +=
Поняв логику присваивания со сложением += один раз, мы, как говориться, убиваем одним выстрелом сразу трех зайцев. Дело в том что операции присваивание с вычитанием -=, присваивание с умножением *= и присваивание с делением /= для переменных с типом Number (Число) будут работать в идентичном направление с единственной подменой арифметической операции.
Давайте для начала рассмотрим оператор присваивание со сложением += с переменными типа Number.
var a = 1;
var b = 2;
a+=b
alert(a);
Кодовую запись += негласно можно считать сокращенной. То есть запись вида a+=b
в ее полной форме можно представить, как a = a + b
. Другими словами, мы берем первую переменную участвующую в операции (в нашем случае это a
) и в ее значение записываем результат сложения ее же (a
) со второй переменной (b
).
Как не трудно догадаться после операции присваивания со сложением в переменной, окажется сумма 1+2, то есть 3.
Такая же логика будет верна и для операций присваивания со сложением для переменных с разными типами. Только в ней JavaScript вновь включит свою способность неявного преобразования типов, которую мы рассматривали в предыдущих уроках. Приведем несколько примеров:
var a = 1;
var c = undefined;
a += c;
alert(a);
Разберем по отдельности. Запись вида a += c;
при полной записи операций присваивания она приобретет вид a = a + c;
при подстановке значений будет иметь вид a = 1 + undefined;
и после неявного приведения типа переменной в переменную a
запишется значение равное NaN (вспоминаем предыдущие уроки, когда мы пытались прибавить число к чему-то неизвестному, неопределенному);
var a = 1;
var b = true;
b += a;
alert(b);
По этому же алгоритму следующая запись b += a;
в полной своей форме будет иметь вид b = b + a;
сначала может быть представлена как b = true + 1;
, и после неявного преобразования (где как мы знаем примет участие ассоциация true c 1) получит в результате значение 2.
var a = 1;
var d = 'привет';
d += a;
alert(d);
Запись вида d += a;
можно преобразовать в полную форму d = d + a;
затем придать вид со значениями d = 'привет' + 1;
и согласно правилам неявного преобразования типа мы получим в наш результат строку вида "привет1".
var b = true;
var c = undefined;
c += b;
alert(c);
Ну и, наконец, последняя запись c += b;
-> c = c + b
-> c = undefined + true
-> результат: NaN.
При желании, все привденные выше примеры можно запусть в браузере и убедиться в том, что наши выводы верные.
Оставшиеся операторы присваивания:
- -= (Присваивание с вычитанием)
- *= (Присваивание с умножением)
- /= (Присваивание с делением)
В своей работе будут руководствоваться абсолютно индентичной логикой. Только вместо арифметической операции сложения они будут использовать вычитание, умножение и деление соответственно.
Задача.
Разобрать на практике следующие примеры:
// пример 1.
var a = true;
var b = 3;
a -= b;
// пример 2.
var c = 1;
var d = 2;
c *= d;
// пример 3.
var e = undefined;
var f = 2;
e /= f;
А на сегодня все
@rassen, Поздравляю!,
Ваш пост был упомянут в моем хит-параде в следующей категории:
Автор нету ли желания сделать такие посты по теме пайтон бекенд ???
Желание есть огромное. Но к моему большому сожалению я не являюсь специалистом в python'e. А пытаться объяснять то, в чем я не разбираюсь, я не возьмусь.
Однако, возможно, кто-то из голосовчан, заходящих на мой пост знает специалистов в python, которые могли бы занятся тем что озвучил @rolik?
Я сам был бы не прочь почитать такие туториалы...
Классные уроки!
Хотя кодить учится не спешу..
Подписываюсь!
P.S. Таки уже подписался)))
Благодарю за позитив. Добро пожаловать в подписчики.
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
В следующих постах, пожалуйста, оставляй ссылки на дополнительные источники, где читатели могут узнать больше о теме и/или проверить информацию.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧