JavaScript asoslari

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:

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;
nullish-oddiy.js
// natija shu yerda chiqadi

Amaliy qo'llanishi โ€” o'zgaruvchi "belgilanmagan" bo'lsa, standart qiymat ko'rsatish:

nullish-default.js
// natija shu yerda chiqadi

?? 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:

Bu farq ayniqsa 0 va bo'sh matn "" uchun juda muhim. Bu qiymatlar falsy, lekin ular aniqlangan (mavjud) qiymatlar!

nol-farq.js
// natija shu yerda chiqadi
Farqni yaxshi anglang: agar 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:

balandlik.js
// natija shu yerda chiqadi
bosh-matn-farq.js
// natija shu yerda chiqadi
Umumiy tavsiya: agar 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:

ustuvorlik-nullish.js
// natija shu yerda chiqadi
Xavfsizlik uchun JavaScript ?? 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
Bu cheklov ataylab qo'yilgan. ?? 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:

nullish-zanjir.js
// natija shu yerda chiqadi

Xulosa