October 3, 2022

Nullish Coalescing Operator

JavaScriptning 2ta qiymat qabul qiluvchi va agar birinchi qiymat null yoki undefined bo'lsagina ikkinchi qiymatni qaytaruvchi Nullish Coalescing Operatori(??).

Tanishtiruv

ES2020 bizga 2ta so'roq belgisi(??) bilan ifodalanadigan Nullish Coalescing Operatorini tanishtirdi. U 2ta qiymat qabul qiluvchi mantiqiy operator.

value1 ?? value2

nullish coalescing operatori qachonki birinchi qiymat(value1) null yoki undefined ga teng bo'lsagina, ikkinchi qiymatni(value2)ni qaytaradi. Texnik jihatdan u quyidagi kodga ekvivalent bo'la oladi.

const result = value1;

if([null,undefined].includes(result)){
  result = value2
}
Agar qiymat null yoki undefined ga teng bo'lsa u nullish value(qiymat) bo'ladi.

Quyida nullish coalescing operatoriga 2ta misol keltiramiz.

const name = null ?? "Hojiakbar"
console.log(name) //Hojiakbar
const age= undefined ?? 20
console.log(age) //20

Nima uchun nullish coalescing operatori

Ko'pincha default value(qiymat)ni variable(o'zgaruvchi)ga olish uchun mantiqiy OR(||) operatoridan foydalanamiz.

let count;
let result = count || 1;
console.log(result) //1

Bu holatda count o'zgaruvchisi undefined qiymatiga teng va mantiqiy OR operatori uni false sifatida tushunib 1 qiymatini qaytaradi. Ammo, bu operatorning kamchiligi agar count 0 yoki " "(bo'sh string)ga teng bo'lsa ham bu qiymatlarni false deya tushunib yana 1ni qaytaradi.

let count = 0;
let result = count || 1;
console.log(result) //1
let count = "";
let result = count || 1;
console.log(result) //1

nullish coalescing operatori bunday muammodan qochishda yordam beradi, chunki u ikkinchi qiymatni birinchi qiymat faqatgina null yoki undefined bo'lsagina qaytaradi.

AND(&&) va OR(||) operatorlari bilan ishlatish

Agar siz nullish coalescing operatorini mantiqiy OR yoki AND operatorlari bilan to'g'ridan to'g'ri ishlatsangiz SyntaxError yuzaga keladi.

const result = null || undefined ?? "OK"; //SyntaxError

Bunday errordan qochish uchun chapdagi ifoda(expression)ni qavslar bilan o'rash kerak.

const result = (null || undefined) ?? "OK"; 
console.log(result) //OK