JavaScript’in En Büyük Kafası Karışık Sorusu
(“Eşit ama değil… değil ama eşit… JS sen misin?”)
JavaScript dünyasında herkesin yolu buraya düşer.
Yeni başlayan da düşer, yıllardır yazan da.
Bir gün masumca şöyle bir kod yazarsın:
if (5 == "5") {
console.log("Eşit!");
}
Ve çalışır.
Sonra şunu yazarsın:
if (5 === "5") {
console.log("Eşit!");
}
Ve…
💥 Sessizlik.
İşte o an başlarsın sorgulamaya:
“Ben mi yanlışım… JavaScript mi?”
Cevap:
👉 JavaScript fazla rahat.
🧠 Önce Temel: JavaScript Eşitliği Nasıl Algılar?
JavaScript’te iki farklı eşitlik anlayışı vardır:
| Operatör | Anlamı |
|---|---|
== | “Yaklaşık eşitlik” |
=== | “Kesin, net, disiplinli eşitlik” |
Biri:
“Ben hallederim.”
Diğeri:
“Kurallar net.”
😎 == Nedir? (Gevşek Eşitlik – Aşırı Rahat Arkadaş)
== operatörü sadece değere bakmak ister,
ama tipler farklıysa panik yapmaz.
JavaScript burada şunu der:
“Dur dur… ben bir dönüştüreyim, sonra bakarız.”
🎯 Basit Ama Tehlikeli Örnek
5 == "5"
➡️ true
📌 Açıklayalım:
- Sol taraf:
number - Sağ taraf:
string
JavaScript:
“String’i number’a çeviririm olur biter.”
Yani aslında şu olur:
5 == Number("5")
➡️ 5 == 5 → true
🤡 Daha Garipleşelim (JavaScript Şov Yapıyor)
0 == false
➡️ true
😳 Ne alaka?
Açıklama:
false→00 == 0→ true
"" == false
➡️ true
Açıklama:
""→0false→0
JavaScript:
“İkiniz de sıfırsınız, barışın.”
null == undefined
➡️ true
📌 Çünkü JS:
“İkiniz de boş gibisiniz.”
Ama:
null == 0 // false
🤯
Evet…
Mantık arama, JavaScript bu.
☠️ == Neden Risklidir?
Çünkü:
- Sen kodu okuduğunu sanırsın
- Ama JavaScript arka planda sihir yapar
- Ve o sihir genelde bug’a dönüşür
💣 Gerçek Hayat Tuzağı
let kullaniciYasi = "0";
if (kullaniciYasi == false) {
console.log("Yaş girilmemiş");
}
➡️ ÇALIŞIR 😱
Ama:
"0"stringfalseboolean
JavaScript:
“Ben dönüştürdüm oldu.”
Ama sen:
“Bu kod neden çalıştı?” diye 20 dk debug yaparsın.
🧠 === Nedir? (Katı Eşitlik – Askeri Disiplin)
=== operatörü iki şey ister:
- Değer aynı mı?
- Tip aynı mı?
İkisi de evet değilse:
❌ “Geçemezsin.”
🧪 Net Örnek
5 === "5"
➡️ false
📌 Çünkü:
- Değer aynı ✔️
- Tip farklı ❌
JavaScript burada dönüştürmez,
yorum yapmaz,
sürpriz yapmaz.
🎯 Güven Veren Sonuçlar
0 === false // false
"" === false // false
null === undefined // false
Ne görüyorsan o.
⚔️ Yan Yana Kapıştıralım
5 == "5" // true
5 === "5" // false
0 == false // true
0 === false // false
null == undefined // true
null === undefined // false
📌 Akılda kalıcı özet:
==→ “Ben dönüştürürüm”===→ “Olduğu gibi bakarım”
🧪 Pratik Senaryo: Formlardan Gelen Veri
HTML formları her zaman string döndürür.
let yas = "18";
❌ Kontrolsüz Yaklaşım (==)
if (yas == 18) {
console.log("Girebilirsin");
}
➡️ Çalışır
Ama neye güvendin?
JavaScript’e…
✅ Profesyonel Yaklaşım (===)
if (Number(yas) === 18) {
console.log("Girebilirsin");
}
📌 Burada fark ne?
- Dönüştürmeyi sen yaptın
- Karşılaştırma bilinçli
- Kod okunabilir
- Bug ihtimali düştü
🧠 Altın Kural (Bunu Ezberle 🧠)
❗ Tip dönüşümünü sen yap, JavaScript’e bırakma
Yani:
Number()
String()
Boolean()
Sonra:
=== kullan
❓ Peki == Hiç mi Kullanılmaz?
Dürüst cevap:
👉 %99 hayır
Ama nadir bir durum var:
if (value == null) {
// value null veya undefined ise
}
📌 Çünkü:
null == undefined→ true===ile iki ayrı kontrol gerekir
Ama bu bile:
- ileri seviye
- dikkat gerektiren
- yeni başlayanlar için riskli
🧠 Profesyoneller Neden === Kullanır?
Çünkü:
✅ Kod daha okunur
✅ Debug süresi azalır
✅ Framework’lerle uyumludur
✅ ESLint bağırmaz 😄
✅ “JS sürprizi” yaşanmaz
🎯 Sık Yapılan Hatalar
❌ == ile form kontrolü
❌ == ile boolean karşılaştırma
❌ == ile 0, "", false karmaşası
🏁 Büyük Final: Hangisini Seçiyoruz?
🥇 Kazanan açık ara: ===
==:
- Fazla rahat
- Fazla iyi niyetli
- Fazla sürprizli 😅
===:
- Net
- Disiplinli
- Profesyonel
🧠 Tek Cümlelik Efsane Özet
“JavaScript’te karşılaştırma yapıyorsan,
===kullan.
Yoksa JavaScript senin yerine düşünür…
ve genelde yanlış karar verir.” 😄🚀

