JavaScript yerleşik isNaN fonksiyonu olan - varsayılan olarak beklenmelidir gibi - bir "Dinamik Tip Operatörü". Bu nedenle (DTC işlemi sırasında) basit bir doğru | gibi yanlış "", " ", " 000"
, NaN olamaz.
Bunun anlamı, argüman verilen ilk olarak geçirecek dönüşüm gibi:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Açıklama:
İşlev gövdesinin üst satırında, (ilk olarak) bağımsız değişkeni bir sayı nesnesine başarıyla dönüştürmeye çalışıyoruz. Ve (ikinci), öyleyiz nokta operatörünü kullanarak - hemen kapalı sıyırma - kendi amaçlarımız için ilkel değer yaratılmış nesnenin.
İkinci satırda, bir önceki adımda elde edilen değeri alıyoruz ve NaN'nin evrendeki herhangi bir şeye eşit olmadığı gerçeğinin avantajını kendimiz bile değil, örneğin: NaN == NaN >> false
sonunda (eşitsizlik için) kendisiyle karşılaştırmak .
Fonksiyon geri verecektir Bu şekilde , gerçek , sadece, verilen bağımsız değişken dönüş, eğer çok sayıda nesnenin bir dönüştürme başarısız bir girişimi olduğu zaman, yani, bir not-a-numarası sayı; örneğin, NaN.
isNaNstatic ()
Bununla birlikte, bir Statik Tip Operatörü için - gerekirse ve gerektiğinde - çok daha basit bir fonksiyon yazabiliriz:
function isNaNstatic(x){
return x != x;
}
Ve DTC'den tamamen kaçının, böylece argüman açıkça bir NaN numarası değilse, yanlış döndürür. Bu nedenle, aşağıdakilere karşı testler:
isNaNStatic(" x"); // will return false
çünkü hala bir ip.
Ancak:
isNaNStatic(1/"x"); // will of course return true.
örneğin isNaNStatic(NaN); >> true
.
Ama aksine hiç isNaN
, isNaNStatic("NaN"); >> false
o (argüman) sıradan bir dize olduğu için.
ps: isNaN'in statik sürümü, modern kodlama senaryolarında çok yararlı olabilir. Ve bunu yayınlamak için zamanımı ayırmamın ana nedenlerinden biri olabilir.
Saygılarımızla.