Умовні оператори ?: і ?? в JavaScript
Умовні оператори дають змогу перевірити деяку умову і залежно від результату перевірки виконати певні дії. Тут ми розглянемо оператор ?: або так званий тернарний оператор і операцію ? ?.
Тернарна операція
Тернарна операція складається з трьох операндів і має таке визначення:
[перший операнд - умова] ?
[другий операнд] : [третій операнд]
Залежно від умови в першому операнді тернарна операція повертає другий або третій операнд. Якщо умова в першому операнді дорівнює true
, то повертається другий операнд; якщо умова дорівнює false
, то третій. Наприклад:
const a = 1;
const b = 2;
const result = a < b ? a: b;
console.log(result); // 1
Тут перший операнд представляє таку умову a < b
. Якщо значення константи a
менше значення константи b
, то повертається другий операнд - a
, тобто константа result
дорівнюватиме a
.
Якщо значення константи a
більше або дорівнює значенню константи b
, то повертається третій операнд - b
, тому константа result
дорівнюватиме значенню b
.
Як операнди також можуть виступати вирази:
const a = 1;
const b = 2;
const result = a < b ? a + b : a - b;
console.log(result); // 3
У цьому прикладі коду перший операнд являє собою ту саму умову, що й у попередньому прикладі, однак другий і третій операнди представляють арифметичні операції. Якщо значення константи a
менше значення константи b
, то повертається другий операнд - a + b
. Відповідно константа result
дорівнюватиме сумі a і b.
Якщо значення константи a
більше або дорівнює значенню константи b
, то повертається третій операнд - a - b
. Відповідно константа result
дорівнюватиме різниці a і b.
Оператор ???
Оператор ??? (nullish coalescing operator) дає змогу перевірити значення на null
і undefined
. Він приймає два операнди:
лівий_операнд ?? правий_операнд
Оператор повертає значення лівого операнда, якщо воно НЕ дорівнює null
і undefined
. Інакше повертається значення правого операнда. Наприклад:
const result = "hello"
??
"world";
console.log(result); // hello
console.log(0 ?? 5); // 0
console.log(""
?? "javascript"); // "" - порожній рядок
console.log(false
?? true); // false
console.log(null
?? "not null"); // not null
console.log(undefined ?? "defined"); // defined
console.log(null
?? null); // null
console.log(undefined ?? undefined); // undefined
Оператор ??=
Оператор ? ?
має модифікацію у вигляді оператора ? ?=, який також дозволяє перевірити значення на null
і undefined
. Він приймає два операнди:
лівий_операнд ??= правий_операнд
Якщо лівий операнд дорівнює null
і undefined
, то йому присвоюється значення правого операнда. Інакше лівий операнд зберігає своє значення. Наприклад:
const message = "Hello JavaScript";
let text = "Привіт, робота!"
text ??= message;
console.log(text); // Hello work!
Тут змінна text
не дорівнює null
або undefined
, тому вона зберігає своє значення. Зворотний приклад:
const message = "Hello JavaScript";
let text = null;
text ??= message;
console.log(text); // Hello JavaScript
Тут змінна text
дорівнює null, тому за посередництвом оператора ??=
вона отримує значення змінної message
.