“==” 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!)