🤯 == mi === mi?

🤯 == mi === mi?

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örAnlamı
==“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 == 5true


🤡 Daha Garipleşelim (JavaScript Şov Yapıyor)

0 == false

➡️ true

😳 Ne alaka?

Açıklama:

  • false0
  • 0 == 0true

"" == false

➡️ true

Açıklama:

  • ""0
  • false0

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" string
  • false boolean

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:

  1. Değer aynı mı?
  2. 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.”
😄🚀

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

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