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