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ı:
- 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
falseolur.// "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"); - Boolean ve Boolean olmayan: Boolean sayıya dönüştürülür (
true1,false0). 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"); - Null ve Undefined:
nullundefinediletrueolarak karşılaştırılır ve başka hiçbir şeyle (kendi dışında)trueolarak karşılaştırılmaz.// Sonuç: true console.log(null == undefined); // Sonuç: false console.log(null == 0); // Sonuç: false console.log(undefined == 0); - Nesne ve primitif: Nesne, primitif hale dönüştürülür (
valueOfveyatoStringkullanı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); - 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.