Yaygın dönüşüm hataları
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
-
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.
-
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"); } -
Dönüşüm sonucunu eşle
- Number("abc")
- NaN (harf)
- Number("")
- 0 (boş)
- Number("42")
- 42 (sayı)
- Number("42px")
- NaN (harf+sayı)