Sobes.tech
Junior

JavaScript-də qeyri-məhdud müqayisə (==) zamanı nə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də qeyri-şərti müqayisə (==) zamanı, müqayisədən əvvəl operandların tipləri çevrilir (coercion). Əgər operandların tipləri fərqlidirsə, JavaScript bir və ya hər iki operandı eyni tipe çevirməyə çalışır və bu, bir sıra qaydalara əsaslanır.

== ilə əsas çevrilmə qaydaları:

  1. Rəqəm və sətir: Sətir rəqəmə çevrilir. Əgər çevirmə uğursuz olarsa (NaN), nəticə həmişə false olur.
    // "10" 10-a çevrilir. Nəticə: true
    console.log(10 == "10");
    // "abc" NaN-a çevrilir. Nəticə: false
    console.log(10 == "abc");
    
  2. Boolean və Boolean olmayan: Boolean rəqəmə çevrilir (true 1-ə, false 0-a). Sonra rəqəm və digər operand müqayisə edilir.
    // true 1-ə çevrilir. Nəticə: true
    console.log(true == 1);
    // false 0-a çevrilir. Nəticə: true
    console.log(false == 0);
    // false 0-a çevrilir, "0" 0-a çevrilir. Nəticə: true
    console.log(false == "0");
    
  3. Null və Undefined: null undefined ilə true kimi müqayisə olunur və başqa heç nə ilə (özündən başqa) true olur.
    // Nəticə: true
    console.log(null == undefined);
    // Nəticə: false
    console.log(null == 0);
    // Nəticə: false
    console.log(undefined == 0);
    
  4. Obyekt və primitiv: Obyekt primitivə çevrilir (valueOf və ya toString vasitəsilə), sonra primitivlər müqayisə edilir.
    // Obyekt "10" sətirinə çevrilir (toString() vasitəsilə), sonra 10 ilə müqayisə edilir
    // "10" 10-a çevrilir. Nəticə: true
    console.log({ toString: () => "10" } == 10);
    
  5. Simvol və başqa: Simvollar yalnız başqa bir simvol və ya simvola çevrilə bilən primitivlərlə müqayisə edilə bilər (bu, əsasən mümkün deyil).
    // Nəticə: false
    console.log(Symbol('a') == 'a');
    

Qeyri-şərti müqayisə avtomatik tiplərin çevrilməsi səbəbindən gözlənilməz nəticələrə səbəb ola bilər. Daha proqnozlaşdırıla bilən davranış üçün, tipləri çevirməyən (===) sərt müqayisə istifadə etmək tövsiyə olunur, bu, operandları birbaşa müqayisə edir.