Урок 3
Урок 3. Основные операторы языка JavaScript
На данном уроке мы рассмотрим:
Операторы
Унарные и бинарные операторы
Арифметические операторы
Логические значения
Сравнение строк
Сравнение с null и undefined
Присваивание
Приоритет
Инкремент и декремент: ++, --
Побитовые операторы
Вызов операторов с присваиванием
Операторы
JavaScript предлагает большое количество мощных операторов, начиная с арифметических, строковых и логических и заканчивая операторами присваивания, сравнения и т.д.
Различные типы операторов воспринимают разное количество операндов.
Унарные и бинарные операторы
Унарные операторы, к примеру операторы инкремента (a++) или изменения знака числа (-a), воспринимают один операнд.
Унарным называется оператор, который применяется к одному выражению. Например, оператор унарный минус "-" меняет знак числа на противоположный:
var x=5;
alert( -x); // -5, унарный минус
Бинарные операторы, представленные основной массой операторов JavaScript (включая операторы сложения, вычитания, умножения и деления), воспринимают два операнда.
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
var a=2, b=5;
alert( b-a); // 3, бинарный минус
Арифметические операторы
Базовые арифметические операторы знакомы нам с детства: это плюс +, минус -, умножить *, поделить /.
Например:
alert (2+2);
Более редкий арифметический оператор % интересен тем, что никакого отношения к процентам не имеет. Его результат a % b — это остаток от деления a на b.
Например:
alert(7 % 2); // 1, остаток от деления 7 на 2
Если бинарный оператор + применить к строкам, то он их объединяет в одну:
var x="my" + "symbol";
alert(x); // mysymbol
Запомните!
Если хотя бы один аргумент является строкой, то второй будет также преобразован к строке!
Причем не важно, справа или слева находится операнд-строка, в любом случае не строковый аргумент будет преобразован.
Например: alert('1'+2); // '12'
alert(2 +'1'); //21
Это приведение к строке — особенность бинарного оператора "+". Остальные арифметические операторы работают только с числами и всегда приводят аргументы к числу.
alert('1'-2); // -1
alert(8/'4'); // 2
Многие операторы сравнения знакомы нам со школы:
Больше/меньше: a > b, a < b
Больше/меньше или равно: a >= b, a <= b
Равно: a == b
Для сравнения используется два символа равенства '='. Один символ a = b означал бы присваивание.
«Не равно». В школе он пишется как ≠, в JavaScript — знак равенства с восклицательным знаком перед ним !=.
Логические значения
Как и другие операторы, сравнение возвращает значение. Это значение имеет специальный логический тип.
Существует всего два логических значения:
true — имеет смысл «да», «верно», «истина».
false — означает «нет», «неверно», «ложь».
Например:
var a=2;
var b=1;
c=a>b;
document.write(c+" a больше b");
или
var a=2;
var b=1;
c=a==b;
document.write(c+" a больше b");
Сравнение строк
Строки сравниваются побуквенно:
alert('Б' > 'А')// true
Буквы сравниваются в алфавитном порядке. Какая буква в алфавите позже — та и больше.
Аналогом «алфавита» во внутреннем представлении строк служит кодировка, у каждого символа — свой номер (код). JavaScript использует кодировку Unicode. При этом сравниваются численные коды символов.
В кодировке Unicode обычно код у строчной буквы больше, чем у прописной. Для корректного сравнения символы должны быть в одинаковом регистре.
Сравнение осуществляется как в телефонной книжке или в словаре. Сначала сравниваются первые буквы, потом вторые, и так далее, пока одна не будет больше другой.
Если первая буква одной строки больше — значит первая строка больше, независимо от остальных символов:
alert('Буква' > 'Абрикос');Если одинаковы — сравнение идёт дальше. Здесь оно дойдёт до третьей буквы:
alert( 'Вася '> 'Ваня'); // true, так как "с" > "н"При этом любая буква больше отсутствия буквы:
alert('Строка' > ' Стро'); // true, так как "к" больше чем "ничего".
Такое сравнение называется лексикографическим.
Строгое равенство
Для проверки равенства без преобразования типов используются операторы строгого равенства === (тройное равно) и !==.
Они сравнивают без приведения типов. Если тип разный, то такие значения всегда неравны (строго):
alert( 0= = = false); // false, так как различные типы.
Сравнение с null и undefined
Интуитивно кажется, что null/undefined эквивалентны нулю, но это не так! Они ведут себя по-другому.
Запомните! Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё. Это жёсткое правило буквально прописано в спецификации языка. При преобразовании в число null становится 0, а undefined становится NaN.
Присваивание
Оператор присваивания выглядит как знак равенства =:
var x=2+3;
document.write(x); // 5
Он вычисляет выражение, которое находится справа, и присваивает результат переменной.
Возможно присваивание по цепочке:
var x,y,x;
x=y=z=1+1;
alert(x); // 2
alert(y); // 2
alert(z); //2
Такое присваивание работает справа-налево, то есть сначала вычисляется самое правое выражение 1+1, присвоится в z, затем выполнится y = z и, наконец, x = y.
Приоритет
В том случае, если в выражении есть несколько операторов - порядок их выполнения определяется приоритетом.
Из школы мы знаем, что умножение в выражении 2 * 2 + 1 выполнится раньше сложения, т.к. его приоритет выше, а скобки явно задают порядок выполнения. Но в JavaScript — гораздо больше операторов, поэтому существует целая таблица приоритетов.
В ней каждому оператору задан числовой приоритет. Тот, у кого число меньше — выполнится раньше. Если приоритет одинаковый, то порядок выполнения — слева направо.
Посмотрим в действии.
В выражении x = 2 * 2 + 1 есть три оператора: присвоение =, умножение * и сложение +. Приоритет умножения * равен 5, оно выполнится первым, затем произойдёт сложение +, у которого приоритет 6, и после них — присвоение =, с приоритетом 17.
Инкремент и декремент: ++, --
Одной из наиболее частых операций в JavaScript, как и во многих других языках программирования, является увеличение или уменьшение переменной на единицу. Для этого существуют даже специальные операторы:
Инкремент ++ увеличивает на 1:
var i=2;
i++;
alert(i); // 3
Декремент -- уменьшает на 1:
var i=2;
i--;
alert(i); // 1
Инкремент/декремент можно применить только к переменной. Код 5++ даст ошибку.
Вызывать эти операторы можно не только после, но и перед переменной: i++ (называется «постфиксная форма») или ++i («префиксная форма»).
Обе эти формы записи делают одно и то же: увеличивают на 1. Инкремент/декремент можно использовать в любых выражениях. При этом он имеет более высокий приоритет и выполняется раньше, чем арифметические операции:
var i=2;
alert(2* ++i); // 6
Побитовые операторы
Поддерживаются следующие побитовые операторы:
ызов операторов с присваиванием
Часто нужно применить оператор к переменной и сохранить результат в ней же.
Например:
var n=2;
n=n+5;
n=n*3;
Эту запись можно укоротить при помощи совмещённых операторов: +=, -=, *=, /=, >>=, <<=, >>>=, &=, |=, ^=.
Вот так:
var n=2;
n +=5; // сейчас n=7 ( работает как n=n+5)
document.write(n+' ');
n *=3; // сейчас n=21 (работает как n=n*3)
document.write(n+' ');
Все эти операторы имеют в точности такой же приоритет, как обычное присваивание, то есть выполняются после большинства других операций.
Вопросы и задания!
Объявите 2 переменные а и b. Напишите программу:
сложения
вычитания
умножения
деления
деления с остатком
Выводите ответы с помощью функции alert, как было приведено на примерах.
Найдите значения выражений:
(20*y+15*x)/3+230 при x=3, y=20
(238*x/8+25*y/5 - 430)*6 при x=16, y=20
Выведите результаты.
Вычислите значения х=2, у=3 после использования постфиксной и префиксной форм инкремента и декремента. Выведите значения. Объясните зачем получаются такие ответы.
Напишите код сравнения строк:
"Airat" и "Ainaz"
"Rashit" и "Rishat"
"group" и "friend"