Nullish Coalescing Operator '??'
(Nullish Coalescing Operator) — bu JavaScript tiliga yaqinda qo‘shilgan yangi operator. Eski brauzerlar buni qo‘llab-quvvatlamasligi mumkin, shuning uchun polyfill'lardan foydalanish zarur bo‘lishi mumkin.
Nullish Coalescing Operator '??'.
(Nullish Coalescing Operator) — bu JavaScript tiliga yaqinda qo‘shilgan yangi operator. Eski brauzerlar buni qo‘llab-quvvatlamasligi mumkin, shuning uchun polyfill'lardan foydalanish zarur bo‘lishi mumkin.
??
operatori ikki savol belgisi bilan yoziladi: ??
.
U null
va undefined
qiymatlarni bir xil tarzda ko‘rib chiqadi, shuning uchun biz bu maqolada "aniqlangan" degan maxsus atamadan foydalanamiz. Qisqacha qilib aytganda, qiymat "aniqlangan" bo‘lsa, u null
yoki undefined
emas.
a ?? b
ning natijasi quyidagicha bo‘ladi
- Agar
a
aniqlangan bo'lsa, undaa
. - Agar
a
aniqlanmagan bo'lsa, undab
.
Boshqacha qilib aytganda, ??
birinchi argumentni qaytaradi, agar u null
yoki undefined
bo‘lmasa. Aks holda, ikkinchi argumentni qaytaradi.
??
operatori yangi bir narsa emas. Bu shunchaki ikkita qiymatdan birinchi "aniqlangan" qiymatni olish uchun qulay sintaksis.
result = a ?? b
ni mavjud operatorlar yordamida quyidagicha qayta yozish mumkin
Endi ??
operatori nima qilishini yaxshi tushunasiz. Keling, uni qayerda yordam berishini ko‘raylik.
??
Operatorining Qanday Yordam Berishi
??
ning umumiy qo‘llanilishi default qiymatni taqdim etishdir.
Masalan, agar user
qiymati null
yoki undefined
bo‘lmasa, foydalanuvchini ko‘rsatamiz, aks holda "Anonymous" ko‘rsatamiz:
Agar user
o‘zgaruvchiga ism berilgan bo‘lsa:
Shuningdek, ??
operatorini ketma-ket ishlatib, ro‘yxatdan birinchi null
/undefined
bo‘lmagan qiymatni tanlash mumkin.
Misol uchun, foydalanuvchining ma'lumotlari firstName
, lastName
yoki nickName
o‘zgaruvchilarida saqlangan bo‘lishi mumkin. Ularning barchasi aniqlanmagan bo‘lishi mumkin, agar foydalanuvchi mos qiymatlarni to‘ldirmagan bo‘lsa.
Biz foydalanuvchi ismini ushbu o‘zgaruvchilardan biridan ko‘rsatmoqchimiz yoki agar barchasi null
/undefined
bo‘lsa, "Anonymous" ko‘rsatmoqchimiz.
Quyidagi kodni ??
operatori yordamida ishlatamiz:
||
bilan Taqqoslash
||
(OR) operatorini ??
bilan bir xil tarzda ishlatish mumkin, bu haqda oldingi bobda gaplashgan edik.
Misol uchun, yuqoridagi kodda ??
o‘rniga ||
qo‘ysak ham, xuddi shu natijani olishimiz mumkin:
Tarixan, ||
operatori avvalroq mavjud bo‘lgan. JavaScript tilining dastlabki versiyalaridan beri mavjud, shuning uchun dasturchilar uzoq vaqt davomida shunday maqsadlarda ishlatishgan.
Boshqa tomondan, ??
operatori JavaScript tiliga yaqinda qo‘shilgan va uning qo‘shilish sababi shundaki, dasturchilar ||
operatoridan unchalik mamnun emas edilar.
Ularning orasidagi muhim farq shundaki:
||
birinchi truthy qiymatni qaytaradi.??
birinchi aniqlangan qiymatni qaytaradi.
Boshqacha qilib aytganda, ||
qiymatlar orasida false
, 0
, bo‘sh satr ""
va null
/undefined
ni ajratmaydi. Ular barchasi falsy qiymatlar. Agar bu qiymatlardan biri birinchi argument bo‘lsa, unda ikkinchi argument natija bo‘ladi.
Amalda esa, default qiymatni faqat o‘zgaruvchi null
yoki undefined
bo‘lsa ishlatmoqchi bo‘lishimiz mumkin. Ya'ni, qiymat haqiqatan ham noma'lum yoki belgilangan bo‘lmagan bo‘lsa.
Masalan, quyidagi misollarni ko‘rib chiqing:
height || 100
height
ni falsy qiymat uchun tekshiradi va u 0, falsy qiymatdir. Shuning uchun ||
natijasi ikkinchi argument, ya'ni 100 bo‘ladi.
height ?? 100
height
ni null
/undefined
uchun tekshiradi va u shunday emas, shuning uchun natija height
o‘zgaruvchisi "as is" (ya'ni 0) bo‘ladi.
Amalda, 0 balandlik ko‘pincha haqiqiy qiymat bo‘ladi, bu default qiymat bilan almashtirilishi kerak emas. Shunday qilib, ??
to‘g‘ri ishlaydi.
Pretsedens
??
operatorining pretsedensi ||
bilan bir xil. Ikkalasi ham MDN jadvalida 3-pozitsiyada.
Bu demak, ||
kabi ??
operatori =
va ?
dan oldin baholanadi, ammo ko‘pchilik boshqa operatsiyalar, masalan, +
, *
dan keyin baholanadi.
Shuning uchun, agar ifoda kabi misollarda parantezlarni qo‘shishimiz kerak bo‘lishi mumkin:
Aks holda, agar parantezlarni olib tashlasak, *
operatori ??
dan yuqori pretsedensga ega bo‘lgani uchun, birinchi bajariladi va natijada noto‘g‘ri natijalarni olamiz.
&&
yoki ||
bilan ??
ni ishlatish
Xavfsizlik sababli, JavaScript ??
ni &&
va ||
operatorlari bilan ishlatishni taqiqlaydi, agar pretsedensni aniq parantezlar bilan ko‘rsatmasangiz.
Quyidagi kod sintaksis xatolikni keltirib chiqaradi:
Bu cheklov albatta bahsli, til spetsifikatsiyasiga qo‘shilgan, chunki dasturchilar ||
dan ??
ga o‘tishga boshlaganda dasturlash xatoliklarini oldini olish maqsadida qo‘shilgan.
Bu cheklovni aylanib o‘tish uchun aniq parantezlardan foydalaning:
Xulosa
??
(Nullish Coalescing) operatori ro‘yxatdan birinchi "aniqlangan" qiymatni tanlash uchun qisqa usulni taqdim etadi.
U o‘zgaruvchilarga default qiymatlarni tayinlash uchun ishlatiladi:
??
operatorining pretsedensi juda past, faqat ?
va =
dan yuqori, shuning uchun ifodada ishlatishda parantez qo‘shishni ko‘rib chiqing.
||
yoki &&
bilan aniq parantezlar bilan ishlatish mumkin.