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

  • Press Start

    Press Start

    4 HAZİRAN 2006
  • Thehalopianoplayer

    Thehalopiano

    4 ŞUBAT 2011
  • tychoadragmire

    tychoadragmi

    20 Mart 2006