03. Основы JavaScript (часть 2)

Операторы

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

Также есть такое понятие, как операнд — это то, к чему применяется оператор. Например, выражение 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).