Операторы
Оператором называют наименьшую автономную часть языка, команду или набор команд.
Также есть такое понятие, как операнд — это то, к чему применяется оператор. Например, выражение 5*2 содержит два операнда 5 и 2. Иногда операнды называют аргументами.
Есть два типа операторов:
- Унарный — оператор, который применяется к одному операнду.
- Бинарный — оператор, который применяется к двум операндам.
let x = 1;
x = -x // -1, в данном случае мы применили унарный минус
let y = 3, z = 2;
y - z // 1,
Сложение строк, бинарный +
Наиболее часто + применяют для сложение чисел, но если применить бинарный + к строкам, то происходит их слияние, которое также называют конкатенацией. Даже приведены примеры сложения строк и чисел.
let a = 1 + 2;
alert(a); // выведет 3
let b = 'строка' + 'текста';
alert(b); // выведет "строкатекста"
В том случае, если хотя бы один операнд будет являться строкой, то второй также будет преобразован к строке.
alert('1' + 2); // 12
alert(2 + '1'); // 21
При этом, все операции происходят слева направо.
alert(2 + 2 + '1'); // будет 41, а не 221
Интересно то, что остальные арифметические операции преобразовывают операнды в числа.
alert(2 - '1'); // 1
alert('6' / '2'); // 3
Унарный +
Унарный плюс ничего не делает с числами, при этом, если веранд не числа, он преобразите его в число.
let x = 1;
alert(+x); // 1
let y = -2;
alert(+y); //-2
// пример преобразования нечисел в числа
alert(+true); // 1
alert(+''); // 0
Приоритет операторов
Все операторы имеют свой приоритет, аналогично тому, что нам известно из школы. Например, в выражении (1 + 2 * 3) сначала выполняется умножение, а потом сложение. Посмотреть приоритетность операторов можно в этой статье.
Сравнение строк
Для сравнения строк используется алфавитный или лексикографический порядок, то есть строки сравниваются посимвольно.
alert('Я' > 'А'); // true
В приведенном примере строки содержатся по одному символу, мы знаем, что «Я» является более старшей буквой, нежели «А». Соответственно возвращается true.
alert('Кот' > 'Код'); // true
В этом примере слово «Кот» будет считаться больше «Код», так как первые две буквы совпадают, но третья в слове «Кот» будет старше.
alert('Сонный' > 'Сон'); // true
Аналогично сравнению «Кот» и «Код», но в случае со словом «Сонный» там больше букв после совпадения, значит оно будет считаться больше.
Сравнение разных типов
При сравнении значений разных типов JS приводит сажное из них к числу, если, конечно, преобразование к числу возможно.
alert('2' > 1); // true, строка 2 становится числом
alert('01' == 1); // true, строка 01 становится числом 1
Логическое значение true становится 1, false — 0.
alert(true == 1); // true
alert(false == 0); // true
Строгое сравнивание
При использовании обычного сравнивайся могут возникать проблемы. Например, оно не будет отличать 0 от false.
alert(0 == false); // вернет true
alert('' == false); // вернет true
Так происходит из-за того, что оператор == преобразует операнды разных типов к числу, в итоге, и пустая строка, и false становятся нулем.
Оператор строгого сравнивания проверяет равенство без приведения типов.
alert(0 === false); // вернет false, так как сравниваются разные типы
Также есть оператор строгого неравенства — !==, аналогичный !=.
Сравнивание с null иundefined
Поведение null и undefined при сравнении с другими значениями специфично.
При строгом равенстве (===) эти значения будут разными из-за различия типов.
alert(null === undefined); // false
При нестрогом равенстве (==) эти значения будут равны друг друго, но не равны ничему другому. Это специальное правило языка.
alert(null == undefined); // true
При использовании математических операторов и других операторов сравнения (< > <= >=) значения null и undefined будут преобразованы к числам. null станет 0, а undefined — NaN (Not a Number).