Урок 04

Операторы

Арифметические

1 + 2;   // 3
5 - 3;   // 2
4 * 2;   // 8
10 / 2;  // 5
10 % 3;  // 1 — остаток
2 ** 3;  // 8 — степень

Инкремент и декремент:

let x = 1;
x++;      // 1, потом 2
x--;      // 2, потом 1
++x;      // сразу 2

Присваивание

let x = 10;
x += 5;  // x = x + 5
x -= 3;  // x = x - 3
x *= 2;  // x = x * 2
x /= 4;  // x = x / 4
x %= 3;  // x = x % 3
x **= 2; // x = x ** 2

Сравнение

1 < 2;    // true
2 <= 2;   // true
3 > 2;    // true
3 >= 3;   // true
1 == '1'; // true — нестрогое
1 === '1'; // false — строгое
1 != '1'; // false
1 !== '1'; // true

Логические

true && false;  // false
true || false;  // true
!true;          // false

Короткое замыкание

&& возвращает первый falsy или последний truthy:

1 && 2;      // 2
0 && 2;      // 0
'а' && 'б';  // 'б'

|| возвращает первый truthy или последний falsy:

1 || 2;   // 1
0 || 2;   // 2
'' || 'x'; // 'x'

Нулевое слияние

?? — возвращает правую часть, если левая null или undefined:

0 ?? 42;         // 0
'' ?? 'default'; // ''
null ?? 'default';     // 'default'
undefined ?? 'default'; // 'default'

Отличие от || — не срабатывает на 0 и ''.

Опциональная цепочка

?. — доступ к свойству, если объект не null / undefined:

const user = null;
user?.name;            // undefined
user?.address?.city;   // undefined
user?.getName?.();     // undefined

Тернарный оператор

const status = age >= 18 ? 'взрослый' : 'ребёнок';

Вложенный тернарник плохо читается:

const size = n < 5 ? 'small' : n < 10 ? 'medium' : 'large';

Лучше switch или объект-маппинг.

Оператор запятая

let a = (1, 2, 3); // a = 3

Используется редко.

Побитовые

5 & 3;   // 1
5 | 3;   // 7
5 ^ 3;   // 6
~5;      // -6
5 << 1;  // 10
5 >> 1;  // 2

Применяются для оптимизаций и работы с флагами.

Оператор in

Проверяет наличие свойства:

'name' in { name: 'Алиса' }; // true
0 in [1, 2, 3];              // true

Оператор instanceof

Проверяет класс:

[] instanceof Array;  // true
new Date() instanceof Date; // true

Оператор delete

Удаляет свойство:

const obj = { a: 1, b: 2 };
delete obj.a; // obj = { b: 2 }

Оператор void

Возвращает undefined:

void 0; // undefined

Используется редко.

Оператор typeof

typeof 42;        // 'number'
typeof 'строка';  // 'string'
typeof undefined; // 'undefined'
typeof {};        // 'object'
typeof function() {}; // 'function'

Приоритет операторов

2 + 3 * 4;      // 14, не 20
(2 + 3) * 4;    // 20

Логические:

true || false && false;   // true, && выше
(true || false) && false; // false

Итоги

  • Арифметические, сравнение, логические
  • === вместо ==
  • ?? вместо || для значений по умолчанию
  • ?. для безопасного доступа
  • Тернарник для простых условий
  • Приоритет важен