Kod doğru. Sonuç yanlış. JavaScript sana bakıp gülümsüyor.
JavaScript yazarken bazen şunu hissedersin:
“Ben bu dili öğreniyorum…
ama sanki dil beni çözmeye çalışıyor.”
Sebep belli:
Type coercion, referans karşılaştırmaları ve
JavaScript’in ‘ben daha iyisini biliyorum’ tavrı.
Hadi tek tek deşifre edelim.
1️⃣ "5" + 1 → "51"
“Toplama istedim, mesajlaşma yaptı.”
"5" + 1
// "51"
Ne oldu?
+operatörü iki farklı kişiliğe sahiptir- Sayı görürse → matematik
- String görürse → string birleştirme
JavaScript şunu düşündü:
“Biri string… o zaman herkes string olsun.”
String(1) → "1"
"5" + "1" → "51"
📌 İpucu:
Number("5") + 1 // 6
Ders:
+güvenilmezdir.
Matematik yapacaksan tipi SEN belirle.
2️⃣ "5" - 1 → 4
“Az önce string’ti, şimdi matematik yaptı?”
"5" - 1
// 4
Neden farklı davrandı?
-operatörü string tanımaz- Zorla number’a çevirir
Number("5") - 1 // 4
📌 JavaScript kişilik özeti:
+→ kararsız- * /→ matematikçi
3️⃣ [] == false → true
“Bu noktada JavaScript beni sınavdan geçiriyor.”
[] == false
// true
Adım adım felaket:
[] → ""
"" → 0
false → 0
0 == 0 → true
📌 Gerçek:== operatörü karşılaştırma yapmaz,
önce herkesi birbirine benzetir.
❌ Yapma:
if (value == false)
✅ Yap:
if (value === false)
4️⃣ [] == ![] → true
“Bu artık kişisel.”
[] == ![]
// true
Olanlar:
![] → false
[] → ""
"" → 0
false → 0
Sonuç:
0 == 0 // true
📌 Ders:
!+==+ array = kaos
5️⃣ [1,2] == "1,2" → true
“Array mi string mi, kimse emin değil.”
[1,2] == "1,2"
// true
Sebep:
[1,2].toString() // "1,2"
Sonra:
"1,2" == "1,2"
📌 Altın kural:
Array’leri asla
==ile karşılaştırma
Kalbin kırılır.
6️⃣ NaN === NaN → false
“Kendisiyle bile eşit değil.”
NaN === NaN
// false
Çünkü:
NaN= “Not a Number”- Tanımsız bir sonuç
- Tanımsız şeyler karşılaştırılamaz
📌 Doğru kontrol:
Number.isNaN(value)
❌ Yapma:
value === NaN
7️⃣ typeof NaN → "number"
“Bu noktada kabulleniş başlar.”
typeof NaN
// "number"
JavaScript diyor ki:
“Evet sayı değil…
ama sayı kategorisinde.”
📌 Bilgi:
Bu JavaScript’in en eski bug’larından biri
ve artık “özellik” sayılıyor.
8️⃣ null == undefined → true
“Ayrılar ama aynı muamele.”
null == undefined
// true
Ama:
null === undefined
// false
Açıklama:
==→ “İkisi de yok gibi”===→ “Ama aynı şey değiller”
📌 Pratik kontrol:
value == null
// hem null hem undefined yakalar
(Bilinçli kullanılırsa faydalı)
9️⃣ 0.1 + 0.2 !== 0.3
“Basit matematik bile mi zor?”
0.1 + 0.2
// 0.30000000000000004
Sebep:
- Floating point hassasiyeti
- Binary sistem
📌 Çözüm:
Math.round((0.1 + 0.2) * 100) / 100
veya:
+(0.1 + 0.2).toFixed(2)
🔟 [] === [] → false
“Aynı ama değil.”
[] === []
// false
Çünkü:
- Array ve object’ler referansla karşılaştırılır
let a = [];
let b = a;
a === b // true
📌 Ders:
Object’lerde “aynı içerik” ≠ “aynı şey”
🧠 Final Gerçek (Bunu Kaydet)
JavaScript seni troll’lemez.
Kuralları gizlidir.
Hayatta kalma rehberi:
- ✅
===kullan - ❌
==’dan uzak dur - 🧠 Tip dönüşümünü sen yap
- 🤡 Garip sonuçta “ben yanlışım” deme, önce JS’i suçla

