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ı:
- Rəqəm və sətir: Sətir rəqəmə çevrilir. Əgər çevirmə uğursuz olarsa (NaN), nəticə həmişə
falseolur.// "10" 10-a çevrilir. Nəticə: true console.log(10 == "10"); // "abc" NaN-a çevrilir. Nəticə: false console.log(10 == "abc"); - Boolean və Boolean olmayan: Boolean rəqəmə çevrilir (
true1-ə,false0-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"); - Null və Undefined:
nullundefinedilətruekimi müqayisə olunur və başqa heç nə ilə (özündən başqa)trueolur.// Nəticə: true console.log(null == undefined); // Nəticə: false console.log(null == 0); // Nəticə: false console.log(undefined == 0); - Obyekt və primitiv: Obyekt primitivə çevrilir (
valueOfvə yatoStringvasitə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); - 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.