CodeBlanks Logo Icon CodeBlanks

Yaygın dönüşüm hataları

JavaScript kursu · Başlangıç · Ders 98/133

Sayıya dönüşümde karşılaşılan sık hataları ve nasıl önleneceğini öğrenirsin.

NaN tuzağı

Number() fonksiyonu sayıya çeviremeyen bir dizgi aldığında NaN döner. Örneğin Number("abc") NaN verir.

Tuzak şudur: NaN bir sayı türüdür ve matematik işlemlerine girince sonucu yine NaN yapar. NaN + 5 yine NaN olur. Üstelik NaN === NaN false döner. Bu yüzden NaN denetlemek için her zaman Number.isNaN() kullanırsın. Böylece hatalı girişler sessizce yayılmaz.

Boş dizgi sıfır olur

Sayıcılar için sıkça karşılan bir başka tuzak: Number("") 0 döner. Yani boş bir kullanıcı girişi 0 ile karışabilir.

Bunu önlemek için önce girişin boş mu yoksa geçersiz mi olduğuna bakarsın. İlke şu: if (input === "") ile boş girişi yakala; else if (Number.isNaN(Number(input))) ile geçersiz girişi yakala; geri kalan durumda gerçek sayıyı kullan. Bu sıra beklenmedik sıfırları önler.

Uygulama Güvenli sayı çözücü

safeParse adında bir fonksiyon tanımla. input parametresi alsın. Gövdede let n = Number(input) ile sayıya çevir. Sonra if (Number.isNaN(n)) ile NaN denetle; NaN ise return 0 yap. Değilse en son return n ile sayıyı döndür.

Örnek çözümü göster
function safeParse(input) {
  let n = Number(input);
  if (Number.isNaN(n)) {
    return 0;
  }
  return n;
}

Uygulama Üç giriş türünü sına

Aşağıdaki safeParse fonksiyonu tanımlı. Şimdi onu üç değerle çağır ve sonucu yazdır: console.log(safeParse("42")), console.log(safeParse("abc")) ve console.log(safeParse("")). Her çağrıyı ayrı satıra yaz.

Örnek çözümü göster
function safeParse(input) {
  let n = Number(input);
  if (Number.isNaN(n)) {
    return 0;
  }
  return n;
}

console.log(safeParse("42"));
console.log(safeParse("abc"));
console.log(safeParse(""));

Kendini test et

  1. Number("abc") ne döner?

    console.log(Number("abc"));
    • NaN
    • 0
    • undefined
    • "abc"
    Cevabı göster

    NaN — Doğru. Number() sayıya çeviremediği için NaN döner.

  2. NaN denetimi ekle

    let n = Number(input);
    if (____(n)) {
      console.log("Geçersiz");
    }
    Cevabı göster
    let n = Number(input);
    if (Number.isNaN(n)) {
      console.log("Geçersiz");
    }
  3. Dönüşüm sonucunu eşle

    Number("abc")
    NaN (harf)
    Number("")
    0 (boş)
    Number("42")
    42 (sayı)
    Number("42px")
    NaN (harf+sayı)

Başlangıç bölümündeki tüm dersler