Операторы
Арифметические
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
Итоги
- Арифметические, сравнение, логические
===вместо==??вместо||для значений по умолчанию?.для безопасного доступа- Тернарник для простых условий
- Приоритет важен