Sobes.tech
Junior

JavaScriptda noaniq taqqoslash (==) paytida nima bo'ladi?

sobes.tech AI

AIdan javob

JavaScriptda noturgan taqqoslash (==) qilishda, taqqoslashdan oldin operandlarning turlari konvertatsiya qilinadi (coercion). Agar operandlarning turlari farq qilsa, JavaScript bir yoki har ikkala operandni ham bir xil turga aylantirishga harakat qiladi va bu bir qator qoidalarga asoslanadi.

== bilan asosiy konvertatsiya qoidalari:

  1. Raqam va satr: Satr raqamga aylantiriladi. Agar aylantirish muvaffaqiyatsiz bo‘lsa (NaN), natija doimo false bo‘ladi.
    // "10" 10 ga aylantiriladi. Natija: true
    console.log(10 == "10");
    // "abc" NaN ga aylantiriladi. Natija: false
    console.log(10 == "abc");
    
  2. Boolean va Boolean bo‘lmagan: Boolean raqamga aylantiriladi (true 1 ga, false 0 ga). Keyin raqam va boshqa operand solishtiriladi.
    // true 1 ga aylantiriladi. Natija: true
    console.log(true == 1);
    // false 0 ga aylantiriladi. Natija: true
    console.log(false == 0);
    // false 0 ga aylantiriladi, "0" 0 ga aylantiriladi. Natija: true
    console.log(false == "0");
    
  3. Null va Undefined: null undefined bilan true sifatida solishtiriladi, va boshqa hech narsa bilan (o‘ziga xosdan tashqari) true bo‘ladi.
    // Natija: true
    console.log(null == undefined);
    // Natija: false
    console.log(null == 0);
    // Natija: false
    console.log(undefined == 0);
    
  4. Obyekt va primitiv: Obyekt primitivga aylantiriladi (metodlar valueOf yoki toString yordamida), so‘ngra primitivlar solishtiriladi.
    // Obyekt satrga aylantiriladi "10" (toString() orqali), so‘ngra raqam 10 bilan solishtiriladi
    // "10" raqamga aylantiriladi. Natija: true
    console.log({ toString: () => "10" } == 10);
    
  5. Simvol va boshqalar: Simvol faqat boshqa simvol yoki simvolga aylantiriladigan primitiv bilan solishtirilishi mumkin (bu odatda imkonsiz).
    // Natija: false
    console.log(Symbol('a') == 'a');
    

Noturgan taqqoslash avtomatik tur konvertatsiyasi tufayli kutilmagan natijalarga olib kelishi mumkin. Ko‘proq prognoz qilinadigan xatti-harakat uchun, tur konvertatsiyasini amalga oshirmaydigan (===) qat’iy taqqoslashni tavsiya etamiz, bu operandlarni to‘g‘ridan-to‘g‘ri solishtiradi.