SORU
22 EYLÜL 2008, PAZARTESİ


Neden JS isNaN(null) == false?

JS bu kodu bana bir pop-up söyleyerek verir "Bir Numara boş olduğunu düşünüyorum", biraz rahatsız edici buluyorum. Neyi kaçırıyorum?

if (isNaN(null)) {
  alert("null is not a number");
} else {
  alert("i think null is a number");
}

Firefox 3 kullanıyorum. Tarayıcı bir hata mı?

Diğer testler:

null == NaN; // false
isNaN("text"); // true
NaN == "text" // false

Yani, sorun NaN ile tam bir karşılaştırma değil gibi görünüyor?

. ben^>Düzenleme:Şimdi soru yanıtlandı, benim yazı arşiv için daha iyi bir versiyonu var, temizlik var. Ancak, bu yorum ve hatta bazı cevaplar biraz biraz anlaşılmaz kılıyor. Yazarlara suçlama. Şeyler arasındaydı değiştirdim:

  • Bir not anlamını dönülerek ilk etapta başlık berbat olduğunu söyleyerek kaldırıldı
  • Önceki cevaplar davranışları bir dize kontrol edin ve manuel bir karşılaştırma yapmak bu örneklere ekledim garip olduğunu düşündüm yeterince açık bir şekilde ifade olmadığını gösterdi.

CEVAP
22 EYLÜL 2008, PAZARTESİ


Kod sormak için çalıştığına inanıyorum, "x sayısal" özel durum x = null kendine geldi. İşlevi isNaN() Bu soruya cevap vermek için kullanılabilir, ama anlamsal özellikle 7 ** değeri atıfta bulunuyor. NaN Wikipedia:

( . NaN ^b>NotbirNumber) sayısal veri türü tanımlanmamış veya unrepresentable bir değeri temsil eden bir değer, özellikle kayan nokta hesaplamaları.

Çoğu durumda cevap "sayısal" hayır olmalıdır. null? düşünüyoruz Ancak, isNaN(null) == false null NaN olmadığı için anlamsal olarak doğru.

İşte algoritmik açıklama:

Fonksiyonu isNaN(x) Sayı geçirilen parametre dönüştürmeye çalışır1(Number(x) eşdeğer) ve daha sonra değer testleri NaN. Eğer parametre bir dizi dönüştürülebilir mi, Number(x) NaN dönecektir2. Parametre dönüşüm 17* *bir dizi NaN, sonuçları bu nedenle, true değerini döndürür; aksi takdirde, false değerini döndürür.

Yani belirli bir durumda x = null, null sayı 0 (Number(null) değerlendirme çalış ve 0,) verir ve isNaN(0) false değerini döndürür dönüştürülür. Rakam ve bir isNaN dönüştürülebilir tek bir dize de yanlış verir. Bir sayıya dönüştürülemeyen bir dize (*23 örneğin*) isNaN('abcd') özellikle Number('abcd') NaN döner çünkü doğru dönmek için neden olur.

Bu görünür kenar durumlarda ek olarak 0/0 gibi NaN döndürmek için Standart sayısal sebep.

İçin görünüşte tutarsız testleri için eşitlik gösterilen soru, davranış NaN belirtilen şekilde herhangi bir karşılaştırma x == NaN yanlış, ne olursa olsun diğer terim de dahil olmak üzere NaN kendisi1.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • BigDawsTv

    BigDawsTv

    20 HAZİRAN 2012
  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006