??= ||= &&= WTF?
Ок, с ходу - три новых оператора в JS, которые проскочили мимо большинства. С виду просто «какая-то ерунда», но не тут-то было! Давайте разберёмся.
??= — Нулевое присваивание
Начнём с того, что этот оператор работает (если честно так и подмывало тут и закончить предложение) только, если переменная null или undefined. Это как сказать: «Если ничего не задано, тогда бери вот это». Пример:
let foo; foo ??= 42; console.log(foo); // 42 — подхватил значение, потому что foo был undefined foo ??= 100; console.log(foo); // 42 — остался, ведь foo уже не null и не undefined
В ECMAScript под капотом называет это Nullish Coalescing Assignment — логика такая: проверяет, пусто ли (null/undefined), если да, — присваивает, если нет, — пропускает. Эдакий мини-страж от ошибок, когда значение по умолчанию нужно только при «пустоте».
||= Логическое присваивание через OR
А вот этот оператор нужен, когда надо присвоить значение, если переменная — falsy (то есть false, 0, '', null, undefined или NaN). Представь: проверка на пустые строки или ноль и дефолтное значение при этом. Кайф:
let y = ''; y ||= 'Привет'; console.log(y); // "Привет", потому что y был пустой строкой let z = 'Я тут'; z ||= 'Пока'; console.log(z); // "Я тут", потому что z уже правдиво
Это называется Logical OR Assignment. Логика простая — если переменная «ложна», то она обновляется. Если правдива — то остаётся как есть. Меньше `if`, меньше кода, больше читаемости.
&&= — Логическое присваивание через AND
А вот тут всё наоборот: присваивание происходит только если переменная truthy. Представь: «если правда, то продолжай». Чёткий инструмент для ситуации, когда обновляем только работающие переменные.
let alpha = 5; alpha &&= 10; console.log(alpha); // 10 — обновил, потому что alpha был 5 let beta = 0; beta &&= 10; console.log(beta); // 0 — остался как был, ведь beta был falsy
По спецификации это Logical AND Assignment. Если переменная правдива, оператор присвоит новое значение, иначе — нет.
На самом деле тут применений я вижу меньше, чем у первых 2х, их то я точно буду использовать, а этот.. хзхз!
Итого, у нас есть три инструмента, которые решают частую головную боль по работе с дефолтами и проверками. Да, не без подводных камней, но эти операторы чистят код, делая его понятнее.
PS: там есть всякое, типа >>= и <<<= но камон, когда ты последний раз использовал сдвиг влево? Ай не п**ди, не использовал ты его.
PPS: Если твой лид говорит тебе, что такое нельзя использовать в проде потому "ну там же эдж, там же сафары" - тыкни носом его в зеленые циферки
Ну и еще, вот ссылка на tc39 - ты знаешь что делать (забить болт).