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, sonra toString ile primitive'e çevrilir; dizinin toString'i elemanları virgülle birleştirir.
  • == farklı tiplerde dönüştürme yapar; null == undefined dışında sürprizlerden kaçınmak için === kullanın.

Pratik sonuçlar

  • Para hesaplarında kuruş cinsinden tamsayı veya Intl.NumberFormat ile gösterim kullanın; ondalık karşılaştırmada Math.abs(a - b) < Number.EPSILON.
  • Input değerleri her zaman string'dir: input.value + 1 birleştirme yapar, önce Number() ile çevirin.
  1. var, let ve const arasındaki fark nedir?KolayJavaScriptFrontend
  2. == ile === arasındaki fark nedir?KolayJavaScriptFrontend
  3. Closure nedir? Bir örnekle açıklayın.OrtaJavaScriptFrontend
  4. Aşağıdaki kodun çıktısı nedir? (Event loop)OrtaJavaScriptFrontend
  5. this anahtar kelimesi nasıl belirlenir? Arrow function'larda ne değişir?OrtaJavaScriptFrontend
  6. Bir debounce fonksiyonu yazın.ZorJavaScriptFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle