Sobes.tech
Junior

JavaScript'te gevşek karşılaştırma (==) sırasında ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

JavaScript'te gevşek karşılaştırma (==) sırasında, karşılaştırmadan önce operandların türleri dönüştürülür (zorlama). Eğer operandların türleri farklıysa, JavaScript bir veya her iki operandı da aynı türe dönüştürmeye çalışır ve bu, bir dizi kurala dayanır.

== ile temel dönüşüm kuralları:

  1. Sayı ve dize: Dize sayıya dönüştürülür. Dönüştürme başarısız olursa (NaN), sonuç her zaman false olur.
    // "10" 10’a dönüştürülür. Sonuç: true
    console.log(10 == "10");
    // "abc" NaN’a dönüştürülür. Sonuç: false
    console.log(10 == "abc");
    
  2. Boolean ve Boolean olmayan: Boolean sayıya dönüştürülür (true 1, false 0). Daha sonra sayı ve diğer operand karşılaştırılır.
    // true 1’e dönüştürülür. Sonuç: true
    console.log(true == 1);
    // false 0’a dönüştürülür. Sonuç: true
    console.log(false == 0);
    // false 0’a, "0" ise 0’a dönüştürülür. Sonuç: true
    console.log(false == "0");
    
  3. Null ve Undefined: null undefined ile true olarak karşılaştırılır ve başka hiçbir şeyle (kendi dışında) true olarak karşılaştırılmaz.
    // Sonuç: true
    console.log(null == undefined);
    // Sonuç: false
    console.log(null == 0);
    // Sonuç: false
    console.log(undefined == 0);
    
  4. Nesne ve primitif: Nesne, primitif hale dönüştürülür (valueOf veya toString kullanılarak), sonra primitifler karşılaştırılır.
    // Nesne, "10" dizesine dönüştürülür (toString() ile), sonra sayı 10 ile karşılaştırılır
    // "10" sayıya dönüştürülür. Sonuç: true
    console.log({ toString: () => "10" } == 10);
    
  5. Sembol ve başka: Semboller yalnızca başka bir sembol veya sembolün dönüştürülebileceği bir primitif ile karşılaştırılabilir (bu çoğu durumda imkansızdır).
    // Sonuç: false
    console.log(Symbol('a') == 'a');
    

Gevşek karşılaştırma, otomatik tür dönüşümleri nedeniyle beklenmedik sonuçlara yol açabilir. Daha öngörülebilir bir davranış için, tür dönüşümü yapmayan ve operandları doğrudan karşılaştıran katı karşılaştırma (===) kullanılması önerilir.