JavaScript 4. Операторы и операнды


Скоро мы с вами дойдём и до функций (а точнее используем их, но скоро будем и подробно разбирать), а сегодня поговорим об операторах и операндах. На самом деле мы с ними имели дело чуть ли не с первой заметки, так что ничего сложного. Когда, например, мы складывали числа, то сама операция сложения, точнее оператор «+», упс, вот уже и оператор, а числа, стало быть – операнды. В этом смысле операторы принято делить на унарные и бинарные. Тут тоже всё просто. Если возле оператора есть только один операнд, то оператор называют унарным. Если операндов два – перед нами бинарный оператор.

Оператор «-», например, бывает унарным, если находится перед числом. В этом случае он меняет знак числа на противоположный.

let a = 5;

a = -a; // знак сменили на противоположный

alert('Применили унарный оператор "-". a = ' + a);

А может быть и бинарным, если это обычное вычитание. Хотя вычитание не работает со строками.

let x = 24.3;

let y = x - 5;

alert ('Обычное вычитание: ' + x + ' - 5 ' + ' = ' + y);

Сложение, кстати, тоже бинарный оператор. Вот тут, операндами могут выступать как числа, так и строки, с этим мы сталкивались в прошлой заметке о преобразовании типов. Тогда же и там же мы с вами столкнулись с интересным явлением, если у оператора «+» один из операндов – строка, то и результат такого «сложения» тоже будет строкой, на каком бы месте эта строка не находилась. Давайте в этом убедимся при помощи ещё одного оператора «typeof». У него есть форма записи и в виде функции, но я привык использовать его как унарный оператор. Пример:

a = 34;

let s = 34 + '12';

alert('Тип переменной s = ' + typeof s + ', а значение ' + a + ' + "12" = ' + s);

Если typeof записывать как функцию и передавать ей аргумент в скобках – результат будет аналогичным, так что используйте как больше нравится. Кроме того, когда складывая строки, вы будете передавать не представление числа в строке, как в последнем примере, а слова или фразы, вам придётся самим следить за пробелами. Напрмер, сложение двух слов просто «слепит» эти слова и о пробеле, если он нужен, думать нужно самим программистам.

a = 'Дядя';

x = 'Вова';

s = a + x;

alert('Так получится: ' + s);

s = a + ' ' + x;

alert('Так - куда лучше: ' + s);

Приоритеты

А вот ещё пара примеров. Операторы, если подряд идёт один и тот же – выполняются слева направо и возможен казус. Тут уже всё зависит от порядка операндов. Если вначале идут два числа, то они будут сложены как числа и только потом к ним в конец добавится строка. А как думаете, что будет, если строку поместить, скажем, на второе место? Попробуйте самостоятельно.

alert(3 + 4 +'6');

Про то, как работает оператор деления, даже если одним из операндов выступает строковое представление числа – мы выяснили в прошлой заметке, рекомендую на неё взглянуть подробнее.

Не поверите, но и сложение может быть унарным. Что оно делает? А выполните такой вот код:

a = true;

alert(+a);

alert(+'');

Оказывается унарный плюс переводит в число, тот операнд, что за ним следует, ну а само преобразование происходит по правилам из всё той же прошлой заметки и эквивалентно использованию функции Number(…).

Парой-тройкой примеров выше мы смотрели как выполняются операторы, если это только сложение. А кто мне скажет, каков будет результат примера:

alert(2 + 2 * 3);

Если из школьной программы вспомнить о приоритетах арифметических операций, то становится понятным, почему сначала были умножены два на три, а затем только проведено сложение. Но, увы, и тут не всё гладко. Если в качестве операндов выступят только цифры два… Проверьте сами – всё не так очевидно, как бы хотелось.

Впрочем, приоритеты унарных операций выше бинарных, затем умножение и деление, потом сложение и вычитание, а выше всех – скобки, ну а операторы одного приоритета исполняются слева направо.

С момента знакомства с переменными мы пользовались оператором присваивания и даже не обратили внимания. Знакомьтесь – «=» это привычный знак равенства. Что в нём может быть такого необычного? А как вам такая запись:

a = x = y = 5.3

alert('a = ' + a);

alert('x = ' + x);

alert('y = ' + y);

Подобной записью можно пользоваться, когда сразу нескольким переменным мы собираемся присвоить одно и то же значение. Она экономит пространство, однако, выглядит чуть менее наглядно, чем три обычных оператора. Впрочем, можете использовать, если она вас не смущает.

Есть так же краткая форма записи для увеличения и уменьшения чисел в переменных.

a = 10;

a = a + 1; // обычная форма записи для увеличения числа на 1

a ++; // краткая форма для того же действия

alert(a);

a--; // а так уменьшают числа

Обратите внимание, между переменной и двумя плюсами не принято писать пробел, равно как и при уменьшении перед минусами, хотя вообще-то ошибки не произойдёт. Со временем мы рассмотрим разницу, когда операторы «++» и «--» находятся не после, а перед числом. Впереди ещё много интересного.

Добьём работу с числами. Бинарный оператор «\\» возводит левый операнд в степень равную правому операнду, но работает это только для натуральных операндов. «%» возвращает целочисленный остаток от деления левого операнда на правый.

alert('2 в 4 степени = ' + 2 ** 4);

alert('Остаток от деления 15 на 4 = ' + 15 % 4);

Что ж, я притомился и прочие операторы, особенно те, что работают с логическими значениями, позвольте рассмотреть в следующий раз. А покамест напоминаю, что для вас я создал репозиторий на gitHub, откуда можно скачивать материалы наших занятий.


Comments 0