Aşağıdaki ifadelerin sonucu nedir? [] + [], [] + {}, '5' - 2, '5' + 2, null >= 0, [] == false
Cevap
Bu sorular JavaScript'in örtük tip dönüşümünü (type coercion) test eder.
[] + [] // "" -> iki dizi de "" string'ine dönüşür
[] + {} // "[object Object]" -> "" + "[object Object]"
"5" - 2 // 3 -> "-" sadece sayısal, "5" sayıya döner
"5" + 2 // "52" -> "+" bir taraf string ise birleştirir
true + 1 // 2
null + 1 // 1 -> null sayıda 0
undefined + 1 // NaN
null == 0 // false -> == null sadece undefined'a eşittir
null >= 0 // true -> ilişkisel karşılaştırma null'u 0 yapar
[] == false // true -> [] -> "" -> 0, false -> 0
NaN === NaN // false -> Number.isNaN veya Object.is kullanın
0.1 + 0.2 === 0.3 // false -> IEEE 754 kayan nokta hatası
typeof null // "object" -> dilin tarihsel bir hatasıKurallar
+operatöründe taraflardan biri (ToPrimitive sonrası) string ise birleştirme yapılır; değilse sayıya çevrilir.-,*,/her zaman sayıya çevirir.- Nesneler önce
valueOf, sonratoStringile primitive'e çevrilir; dizinintoString'i elemanları virgülle birleştirir. ==farklı tiplerde dönüştürme yapar;null == undefineddışında sürprizlerden kaçınmak için===kullanın.
Pratik sonuçlar
- Para hesaplarında kuruş cinsinden tamsayı veya
Intl.NumberFormatile gösterim kullanın; ondalık karşılaştırmadaMath.abs(a - b) < Number.EPSILON. - Input değerleri her zaman string'dir:
input.value + 1birleştirme yapar, önceNumber()ile çevirin.
İlgili JavaScript soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.