JS операторы
Операторы JavaScript — специальные символы или ключевые слова, выполняющие операции над значениями (операндами) и возвращающие результат.
Зачем нужно
Операторы — строительные блоки любого выражения. Без понимания приоритетов операторов, правил приведения типов и различий между == и === легко получить трудноотлавливаемые баги. ES6+ добавил важные операторы: nullish coalescing (??), optional chaining (?.), логическое присваивание (&&=, ||=, ??=), которые активно используются в современном коде.
Где используется
- Арифметика и математические вычисления
- Сравнение значений при условиях и сортировке
- Логические проверки в условиях и тернарных выражениях
- Безопасный доступ к свойствам через
?.и значения по умолчанию через?? - Битовые операции при работе с флагами и низкоуровневыми данными
Основной контент
Арифметические операторы
console.log(10 + 3); // 13
console.log(10 - 3); // 7
console.log(10 * 3); // 30
console.log(10 / 3); // 3.3333...
console.log(10 % 3); // 1 (остаток от деления)
console.log(2 ** 10); // 1024 (возведение в степень)
// Инкремент / декремент
let x = 5;
console.log(x++); // 5 (постфикс — сначала значение, потом +1)
console.log(++x); // 7 (префикс — сначала +1, потом значение)
// Унарный минус
console.log(-x); // -7
Операторы сравнения
// === (строгое) vs == (нестрогое с приведением типов)
console.log(1 == '1'); // true — строка приводится к числу
console.log(1 === '1'); // false — разные типы
// Всегда используйте ===, кроме явной проверки null/undefined:
const val = null;
console.log(val == null); // true — val равен null или undefined
console.log(val === null); // true — только null
// Сравнение с NaN
console.log(NaN === NaN); // false — NaN не равен ничему
console.log(Number.isNaN(NaN)); // true — правильная проверка
// Операторы: > < >= <=
console.log('б' > 'а'); // true — сравнение строк по коду Unicode
console.log(null > 0); // false
console.log(null == 0); // false — особый случай
console.log(null >= 0); // true — ещё один особый случай!
Логические операторы
// && — AND: возвращает первый falsy или последний truthy
console.log(1 && 2 && 3); // 3
console.log(0 && 'anything'); // 0
// || — OR: возвращает первый truthy или последний falsy
console.log(0 || '' || 'default'); // 'default'
console.log(1 || 'unreached'); // 1
// ?? — Nullish Coalescing: только null/undefined, не 0/''/false
console.log(0 ?? 'default'); // 0 — 0 не null/undefined!
console.log(null ?? 'default'); // 'default'
// ! — NOT
console.log(!true); // false
console.log(!!0); // false (двойное отрицание = Boolean)
Оператор присваивания и логическое присваивание
let a = 1;
a += 5; // a = 6
a -= 2; // a = 4
a *= 3; // a = 12
// Логическое присваивание (ES2021)
let user = { name: 'Иван', age: null };
user.age ??= 25; // присваивает только если null/undefined → 25
user.name ||= 'Гость'; // присваивает только если falsy → 'Иван' (не меняется)
user.isAdmin &&= false; // присваивает только если truthy → undefined (не меняется)
Тернарный оператор и optional chaining
const score = 75;
const grade = score >= 90 ? 'A' : score >= 70 ? 'B' : 'C';
console.log(grade); // 'B'
// Optional chaining ?.
const obj = { a: { b: { c: 42 } } };
console.log(obj?.a?.b?.c); // 42
console.log(obj?.x?.y?.z); // undefined (не TypeError)
console.log(obj?.a?.greet?.); // undefined (безопасный вызов метода)
// Оператор typeof
console.log(typeof 'hello'); // 'string'
console.log(typeof undefined); // 'undefined'
console.log(typeof null); // 'object' — исторический баг!
console.log(typeof function{}); // 'function'
Частые ошибки
==вместо===: неявное приведение типов даёт неожиданные результаты —0 == false,'' == false,null == undefined.null >= 0равноtrue: null при сравнении>,<,>=,<=преобразуется в0, но при==— нет. Непоследовательное поведение.||для значений по умолчанию с нулём:count || 10вернёт10еслиcount === 0. Используйте??.- Постфиксный инкремент:
return x++вернёт исходное значение, а не увеличенное — частая ошибка в рекурсии.
Связанные темы
Ресурсы
- MDN — Выражения и операторы
- javascript.info — Операторы
- javascript.info — Сравнение
- doka.guide — Операторы
🎓 Источник: 👶 JavaScript for Beginners 5. Expressions and Assignment
- 📅 2021-10-02 · YouTube
- Тезисы: Expression = вычисляется в значение. Statement = инструкция действия. Assignment
=тоже expression (возвращает присвоенное).a = b = 5работает потому чтоb = 5это expression
⚡ Источник: Logical Expression в javascript · AsForJS
- 📅 2023-05-10 · YouTube
- Тезисы:
&&возвращает первый falsy или последний truthy.||наоборот.??— только при null/undefined (не при 0 или "")
⚡ Источник: JavaScript expressions · AsForJS
- 📅 2023-05-26 · YouTube
- Тезисы: в спеке у каждого expression есть
Evaluationstep. Operator precedence — это структура парсера, а не runtime
⚡ Источник: Почему в JavaScript прибавить число к обьекту - это круто · AsForJS
- 📅 2023-05-18 · YouTube
- Тезисы:
+запускает abstract operationApplyStringOrNumericBinaryOperator. Для объектов сначалаToPrimitiveчерезSymbol.toPrimitiveили fallbackvalueOf/toString