Kategoriler
JavaScript / TypeScript

JavaScript’te Eşitlik Savaşları: == mi, === mi?

JavaScript’te == ile === arasındaki fark, birinin size çay teklif ederken şekersiz mi şekerli mi diye sormamasına benzer. Bir anlık dalgınlıkla, istemediğiniz bir tatla karşılaşabilirsiniz! Peki, bu iki operatör neden bu kadar sinsi bir şekilde farklı davranıyor? Gelin, bu eşitlik savaşlarının perde arkasını birlikte keşfedelim!

“==” Operatörü: JavaScript’in İyimser Pazarlıkçısı

== operatörü, tıpkı bir pazarlıkçı gibi, “Hadi biraz esnek olalım, ne olacak?” diyerek veri tiplerini umursamaz. Örneğin:

console.log(5 == "5"); // true 🤯  
console.log(true == 1); // true 🎭  
console.log(null == undefined); // true 👯  

Burada JavaScript, “Tamam, senin string 5’in, benim integer 5’ime eşit olsun. Neden olmasın?” diyerek tip dönüşümü yapar. Ancak bu iyimserlik, bazen kabus gibi sonuçlara yol açar:

console.log("" == 0); // true 😱  
console.log("0" == false); // true 🧟  

Düzeltme:

Eğer kodunuzda == kullanıyorsanız, JavaScript’in “Ne olursan ol, gel!” felsefesine hazırlıklı olun. Ama unutmayın: Esneklik, bazen hata demektir!

===” Operatörü: Katı Öğretmenin Disiplini

=== operatörü ise, “Kurallar net: Hem değer hem de tip aynı olacak!” diyen bir öğretmen gibidir.

Örnekler:

console.log(5 === "5"); // false 🚫  
console.log(true === 1); // false 🙅  
console.log(null === undefined); // false 🧐  

Burada JavaScript, “Hayır, string 5 ile integer 5 aynı değil. Git, tipini öğren de gel!” der. Hatta bazen sıfır tolerans gösterir:

console.log(NaN === NaN); // false ❓  
// Not: NaN, kendine bile eşit değildir!  

Düzeltme:

=== kullanmak, kodunuzu tahmin edilebilir hale getirir. Tıpkı bir metro saatine güvenmek gibi: Tam zamanında çalışır!

Sürprizler ve Karanlık Köşeler

JavaScript’in eşitlik kuralları bazen David Lynch filmi kadar gizemlidir. İşte sizi şaşkınlığa uğratacak ve belki de bir stackoverflow gecesi yaşatacak sürprizler:

NaN: JavaScript’in Kimlik Krizi

console.log(NaN === NaN); // false ❓  
console.log(NaN == NaN); // false 💔  

Neden?

Çünkü NaN (Not a Number), tanımı gereği “Bu bir sayı değil, üzgünüm ama kendim bile ne olduğumu bilmiyorum!” diyen bir tür kimliksiz değer. Peki çözüm?

console.log(isNaN(NaN)); // true 🎯 (Ama dikkat! isNaN("Merhaba") de true verir!)  
console.log(Number.isNaN(NaN)); // true ✅ (Modern ve güvenli yol)  

null vs undefined: İkizlerin Savaşı

console.log(null == undefined); // true 👯  
console.log(null === undefined); // false 🧐  

Neden?

== operatörü, “Boşluk boşluktur, ne fark eder?” diyerek bu ikiliyi affeder. Ancak === için “null bir object, undefined ise undefined. Kesinlikle aynı değiller!” kuralı geçerlidir.

0 ve -0: Terminatör’deki İkizler

console.log(0 === -0); // true 😱  
console.log(Object.is(0, -0)); // false 🕶️  

Neden?

Matematikte 0 ile -0 aynıdır, ama JavaScript’in derinliklerinde “İşaret biti farklı, kardeşim!” diyen bir gerçek vardır. Object.is() bu farkı yakalar.

Nesneler: Referansların Labirenti

const obje1 = { isim: "Halit" };  
const obje2 = { isim: "Halit" };  
console.log(obje1 == obje2); // false 🧩  
console.log(obje1 === obje2); // false 🚫  
console.log(obje1 === obje1); // true ✅ (Kendine referans verirse tabii!)  

Neden?

Nesnelerde == ve === aynı çalışır: Referansları karşılaştırır. İçerik aynı olsa bile “Sen New York’taki Starbucks’tasın, ben Ankara’daki. Aynı değiliz!” der.

Hangi Operatörü Seçmeli?

=== Kullanın:

Tıpkı dondurma seçerken kakaolu mu vanilyalı mı diye net karar vermek gibi.

if (deger === 42) { /* Kesinlikle 42 ise */ }  

== Kullanabileceğiniz Tek Durum:

Undefined veya null kontrolü yapıyorum, tembellik yapayım!” diyorsanız:

if (deger == null) { /* null VEYA undefined ise */ }  

JavaScript’te eşitlik, tıpkı bir ilişki gibidir: Net kurallar ve açık iletişim şart! === ile “Senin tipin ne?” sorusunu sormayı ihmal etmeyin. Yoksa NaN gibi “Ben kimim?” diye sorgulayan bir kodla baş başa kalabilirsiniz! 🚀

Bonus:

console.log([] == ![]); // true 

🤯 (Neden? Hadi, yorumlarda siz cevap verin!)

Eğer yazılarımı beğendiyseniz, bir kahve ısmarlayarak destek olabilirsiniz! ☕

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir