Nullish birlashtiruvchi operator ??
?? โ nisbatan yangi operator (2020-yilda qo'shilgan). U "aniqlangan" birinchi qiymatni topish uchun ishlatiladi va || ning ba'zi kamchiliklarini bartaraf etadi.
?? operatori nima?
a ?? b ifodasining natijasi:
- Agar
aaniqlangan bo'lsa (ya'ninullham,undefinedham bo'lmasa) —aqaytariladi; - Aks holda —
bqaytariladi.
Boshqacha aytganda, ?? qiymat null yoki undefined ekanini tekshiradi. Buni oddiy if bilan ham yozsa bo'lardi:
// a ?? b quyidagiga teng:
let natija = (a !== null && a !== undefined) ? a : b;
Amaliy qo'llanishi โ o'zgaruvchi "belgilanmagan" bo'lsa, standart qiymat ko'rsatish:
?? va || farqi โ eng muhim qism
Bir qarashda ?? va || bir xil ko'rinadi. Haqiqatan ham, ko'p holatlarda ular bir xil natija beradi. Ammo muhim farq bor:
||birinchi truthy qiymatni qaytaradi;??birinchi aniqlangan (null/undefined bo'lmagan) qiymatni qaytaradi.
Bu farq ayniqsa 0 va bo'sh matn "" uchun juda muhim. Bu qiymatlar falsy, lekin ular aniqlangan (mavjud) qiymatlar!
0 yoki "" to'g'ri va kutilgan qiymat bo'lsa, || ishlatish xatoga olib keladi โ u ularni "yo'q" deb hisoblab, standart qiymatga almashtiradi. ?? esa faqat null/undefined ni almashtiradi.Yana bir aniq misol โ balandlikni saqlash. Foydalanuvchi 0 ni tanlagan bo'lishi mumkin, va bu haqiqiy qiymat:
0, "" yoki false qiymatlari ham to'g'ri, mavjud qiymat bo'lishi mumkin bo'lsa โ ?? ishlating. Agar faqat "bo'sh emas" qiymatni istasangiz โ || ishlating.?? ning ustuvorligi
?? ning ustuvorligi past โ || va && bilan bir xil darajada (aniqrog'i, || bilan bir xil). Shuning uchun murakkab ifodalarda uni matematik amallardan keyin ishlashiga e'tibor bering. Odatda qavs qo'yish tavsiya etiladi:
?? ni || yoki && bilan qavssiz birga ishlatishni taqiqlaydi โ bu sintaksis xatosi (SyntaxError) beradi. Masalan, a ?? b || c xato. To'g'ri yozish uchun qavs kerak: (a ?? b) || c.// Bu XATO โ SyntaxError beradi:
// let x = 1 && 2 ?? 3;
// To'g'ri โ qavs bilan:
let x = (1 && 2) ?? 3;
console.log(x); // 2
?? va || ning natijalari inson uchun oson chalkashadi, shuning uchun til dizaynerlari qavsni majburiy qildi โ bu xatolarning oldini oladi.?? bilan zanjir
Bir nechta ?? ni ketma-ket ishlatib, birinchi aniqlangan qiymatni tanlash mumkin:
Xulosa
??birinchi aniqlangan (null/undefined bo'lmagan) qiymatni qaytaradi;||dan farqi:||falsy qiymatlarni (0,"",false) ham o'tkazib yuboradi,??esa faqatnullvaundefinedni;0yoki bo'sh matn haqiqiy qiymat bo'lishi mumkin bo'lsa โ??ishlating;??ni||yoki&&bilan qavssiz ishlatib bo'lmaydi โ SyntaxError beradi;- Ketma-ket
??zanjiri birinchi aniqlangan qiymatni topadi.