Оператор ??= в JavaScript: Простота присвоєння значень за замовчуванням

pic

Втомились від громіздких або неточних способів обробки null та undefined у вашому коді? Зустрічайте оператор присвоєння з об’єднанням з null (??=), який став справжнім проривом у ECMAScript 2021 (ES12).

Подумайте про ??= як про розумного охоронця для ваших змінних. Він призначає значення лише тоді, коли змінна дорівнює null або undefined.

До ??=

// Підхід до 2021 року  
if (user.name === null || user.name === undefined) {  
 user.name = 'Anonymous';  
}  

// Або використовуючи оператор об'єднання з null (??)  
user.name = user.name ?? 'Anonymous';

Після ??=

// ES2021 та пізніше  
user.name ??= 'Anonymous';

Коли ви пишете user.name ??= 'Anonymous', код перевіряє, чи є user.name рівним null або undefined.

  • Якщо так, він присвоює 'Anonymous'.
  • Якщо ні, існуюче значення залишається незмінним, навіть якщо це 0, false або порожній рядок.

Чому ??= краще альтернатив

1️⃣ Громіздкі if-вирази: Занадто повторювані.

if (user.name === null || user.name === undefined) {  
 user.name = 'Anonymous';  
}

2️⃣ Логічний оператор "OR" (||): Замінює валідні значення "falsy", такі як 0 або ''.

user.name = user.name || 'Anonymous'; // Перезаписує '', 0 або false

3️⃣ Тернарний оператор: Може стати важким для розуміння при складних умовах.

user.name = user.name === null || user.name === undefined  
 ? 'Anonymous'  
 : user.name;

4️⃣ ??=: Чисто, точно та інтуїтивно.

user.name ??= 'Anonymous';

🎯 Де ??= працює найкраще

Він ідеально підходить для випадків, коли значення "falsy", такі як 0, false або '', мають значення:

let score = 0;  
score ??= 100; // Залишає 0  

let tag = '';  
tag ??= 'default'; // Залишає порожній рядок  

let active = false;  
active ??= true; // Залишає false

Використовуючи ??=, ви гарантуєте, що ваш код працює так, як очікується, зменшуючи можливість помилок, особливо коли обробляєте введення користувача або налаштування за замовчуванням.

Перекладено з: JavaScript’s ??= Operator: Default Values Made Simple

Leave a Reply

Your email address will not be published. Required fields are marked *