??= ||= &&= 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 - ты знаешь что делать (забить болт).