JavaScript'te bir sayının NaN olup olmadığını nasıl kontrol edersiniz?


415

Ben sadece Firefox'un JavaScript konsolunda deniyorum, ancak aşağıdaki ifadelerden hiçbiri doğru dönmüyor:

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

5
Gerçek hedefiniz sayıları kontrol etmekse okumaya değer: stackoverflow.com/questions/18082/…
Paul


1
@Gothdo: tabii, ama herhangi bir değerin aksine bir sayının NaN olup olmadığını nasıl kontrol edeceğim sorusunu sordum .
Paul

3
@ PaulD.
Michał Perłakowski

PaulD.Waite Sana katılıyorum, ama @Gothdo ile aynı endişeye sahibim. Birçok kişi "JS'deki bir değerin NaN olup olmadığını kontrol etme" niyetiyle bu soruya yönelir. Aynı cevap için mjohnsonengr'in yorumunu kontrol edebilirsiniz . BTW, ben de işaretledim Bu soru moderatörün dikkatine.
dopeddude

Yanıtlar:


582

Bu kodu deneyin:

isNaN(parseFloat("geoff"))

Yalnızca sayı yerine herhangi bir değerin NaN olup olmadığını denetlemek için buraya bakın: Javascript'te NaN'yi nasıl test edersiniz?


8
PaseFloat'a ihtiyaç var mı?
rahul

23
Boş bir dizenin şu şekilde yorumlanmasını istiyorsanız NaN, evet. (Her zaman yapacağını söylemiyorum.)
Paul D.Waite

1
Ben olsaydım ben bir değişkene atamak ve koşul değişkeni kullanın! == değişken. Şartnamelerde
allsyed

3
isNaN(parseFloat("geoff")) // true isNaN(parseFloat("10geo")) // false Bu nasıl faydalı?
Prashanth

Denemek gibi bu da yararlı olabilir w3schools.com/jsref/jsref_isnan.asp
Srijan Chaudhary

146

Az önce etkili JavaScript kitabında bu teknikle karşılaştım :

NaN, kendisine eşit olmayan bir işlem olarak kabul edilen tek JavaScript değeri olduğundan, bir değerin kendisine eşit olup olmadığını kontrol ederek NaN olup olmadığını her zaman test edebilirsiniz:

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined; 
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" }; 
e !== e; // false

@ Allsyed yorum yapana kadar bunu fark etmedim, ama bu ECMA spesifikasyonunda: https://tc39.github.io/ecma262/#sec-isnan-number


27
Etkili ama sezgisel. Bu tür bir kodu korumak istemezdim.
osa

35
Mantıksız olan kod değil, NaN.
Jazzy

20
@DanM Bu bir hata değil, NaN'nin standart IEE754 davranışı. CPU'larda bu şekilde uygulanır ve dünyadaki float kullanan her programlama dilinde beklenen davranıştır.
Tarmil

4
@Tarmil Usulüne dikkat! Bu gerçekten ilginç; Her zaman NaN eşitsizliğinin tuhaflığının Javascript bir şey olduğunu düşündüm.
Dan M

2
NaN === Nan; // yanlış. Bu javascript bilinen bir hatadır. isNan yeni bir yöntemdir.
atilkan

52

Bu kodu kullanın:

isNaN('geoff');

isNaN()MDN'deki belgelere bakın .

alert ( isNaN('abcd'));  // alerts true
alert ( isNaN('2.0'));  // alerts false
alert ( isNaN(2.0));  // alerts false

1
Belki de sadece benim, ama NaN fikri ne zaman kafa karıştırıcı olur var value = 0/0;ve var value2= String("123 131");NaN değerleri yaratır ve bunun gibi bir şey var value3 = "abcd";de NaN değeridir.
Nick Pineda

@NickPineda Neden?
Sinjai

44

Number türünde bir değer olup olmadığına bakılmaksızın NaN, global işlev isNaNişi yapacak

isNaN(any-Number);

JS'deki tüm türler için çalışan genel bir yaklaşım için aşağıdakilerden herhangi birini kullanabiliriz:

ECMAScript-5 Kullanıcıları için:

#1
if(x !== x) {
    console.info('x is NaN.');
}
else {
    console.info('x is NOT a NaN.');
}

ECMAScript-6 kullanan kişiler için:

#2
Number.isNaN(x);

ECMAScript 5 & 6'nın her ikisinde de tutarlılık amacıyla, bu çoklu dolguyu Number.isNan için de kullanabiliriz

#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {     
    return value !== value;
}

daha fazla bilgi için lütfen Bu Cevabı kontrol edin .


6
Sadece "isNan ()" kullandığınız için değil, daha ayrıntılı bir cevap verdiğiniz için teşekkür ederiz. Bu soruyu Google'da bulduğumda aradığım şey tam olarak bu.
mjohnsonengr

1
".... yukarıdaki durumlar için yanlış sonuçlar veriyordu." Yanlış söyleyemem, sadece farklı, çünkü küresel isNaNargümanı önce bir sayı değerine dönüştürür.
Felix Kling

1
@FelixKling Lütfen güncellenmiş cevabı kontrol edin. Teşekkürler.
dopeddude

1
isNaN ("lorem ipsum"); // ES5 ile doğru fikrimi esiyordu
Nick Pineda

2
@NickPineda Duygu çok karşılıklı, ancak sonunda MDN bunu şu şekilde açıklayabilirdi: "isNaN işlevinin argümanı Number türünde olmadığında, değer önce bir Sayıya zorlanır. Sonuçta elde edilen değer, NaN."
dopeddude

16

NaN böyle test edilemeyen özel bir değerdir. Sadece paylaşmak istediğim ilginç bir şey

var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
    alert('nanValue is NaN');

Bu sadece NaN değerleri için geçerlidir ve güvenli bir test yöntemidir. Kesinlikle bir fonksiyona sarılmalıdır veya en azından yorumlanır, çünkü aynı değişkenin birbirine eşit olup olmadığını test etmek çok mantıklı değildir, hehe.


1
Bu tamamen güvenilir bir yol değil. Şartnamelere göre. değişken! == değişken NaN kontrol etmek için en güvenilir yoldur
allsyed

1
Yukarıdaki cevabımı gör ^
Jazzy

14

Genel isNaN(value)işlev çağrısını kullanmalısınız , çünkü:

Örnekler:

 isNaN('geoff'); // true
 isNaN('3'); // false

Umarım bu sana yardımcı olmuştur.


1
Evet, isNaN('') //falseama parseInt('') //NaN. Aynı şey söylenebilir null.
Sessiz Penguen

13

İtibariyle ES6 , Object.is(..)mutlak eşitlik için iki değer test etmek için kullanılabilecek yeni bir araçtır:

var a = 3 / 'bar';
Object.is(a, NaN); // true


9

'1.2geoff'Ayrıştırılan sorunu çözmek için Number()bunun yerine ayrıştırıcıyı kullanmanız yeterlidir.

Bundan ziyade:

parseFloat('1.2geoff'); // => 1.2
isNaN(parseFloat('1.2geoff')); // => false
isNaN(parseFloat('.2geoff')); // => false
isNaN(parseFloat('geoff')); // => true

Bunu yap:

Number('1.2geoff'); // => NaN
isNaN(Number('1.2geoff')); // => true
isNaN(Number('.2geoff')); // => true
isNaN(Number('geoff')); // => true

EDIT: Ben sadece başka bir sorunu fark ettim ama ... yanlış değerleri (ve gerçek bir boole olarak doğru) Number()dönüş olarak geçti 0! Bu durumda ... parseFloat her seferinde çalışır. Öyleyse buna geri dönün:

function definitelyNaN (val) {
    return isNaN(val && val !== true ? Number(val) : parseFloat(val));
}

Ve bu görünüşte her şeyi kapsıyor. Onu lodash'lardan% 90 daha yavaş karşılaştırdım, _.isNaNancak o zaman tüm NaN'leri kapsamıyor :

http://jsperf.com/own-isnan-vs-underscore-lodash-isnan

Sadece açık olmak gerekirse, benimki "Sayı Değil" olan bir şeyin insan edebî yorumunu ve lodash's bir şeyin "NaN" olup olmadığını kontrol etmek için bilgisayarın kelimenin tam anlamıyla yorumunu halleder.


7

@Chiborg'un cevabı doğru olsa da, not edilmesi gereken daha çok şey var:

parseFloat('1.2geoff'); // => 1.2
isNaN(parseFloat('1.2geoff')); // => false
isNaN(parseFloat('.2geoff')); // => false
isNaN(parseFloat('geoff')); // => true

Girdi doğrulamak için bu yöntemi kullanıyorsanız, sonuç oldukça liberal olacaktır.

Yani, evet kullanabilirsiniz parseFloat(string)(veya tam sayılar durumunda parseInt(string, radix)'ve daha sonra bunu ile sarın isNaN(), ancak ek sayısal olmayan karakterlerle iç içe numaralarla gotcha'nın farkında olun.


1
İlginç. Buna karşı koymanın ve "1.2geoff" un gerçekten geçerli bir sayı dizesi olmadığını tespit etmenin herhangi bir yolu var mı?
Gabe Halsmer

2
Bunun yalnızca dize bir sayı ile başladığında gerçekleştiğini unutmayın . parseFloat('test1.2')dönecektir NaN.
Eduard Luca

6

Basit Çözüm!

GERÇEKTEN süper basit! Buraya! Bu yöntemi kullanın!

function isReallyNaN(a) { return a !== a; };

Şu kadar basit kullanın:

if (!isReallyNaN(value)) { return doingStuff; }

hereBu işlevi kullanarak performans testine bakın vsselected answer

Ayrıca: Birkaç alternatif uygulama için 1. örneğe bakın.


Misal:

function isReallyNaN(a) { return a !== a; };

var example = {
    'NaN': NaN,
    'an empty Objet': {},
    'a parse to NaN': parseFloat('$5.32'),
    'a non-empty Objet': { a: 1, b: 2 },
    'an empty Array': [],
    'a semi-passed parse': parseInt('5a5'),
    'a non-empty Array': [ 'a', 'b', 'c' ],
    'Math to NaN': Math.log(-1),
    'an undefined object': undefined
  }

for (x in example) {
    var answer = isReallyNaN(example[x]),
        strAnswer = answer.toString();
    $("table").append($("<tr />", { "class": strAnswer }).append($("<th />", {
        html: x
    }), $("<td />", {
        html: strAnswer
    })))
};
table { border-collapse: collapse; }
th, td { border: 1px solid; padding: 2px 5px; }
.true { color: red; }
.false { color: green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>

Alternatif olarak adlandırılmış bir yöntem kullanmak istemiyorsanız ve daha global olarak kullanılabilir olmasını sağlamak istiyorsanız, uygulama için izlediğiniz birkaç alternatif yol vardır. Uyarı Bu çözümler yerel nesnelerin değiştirilmesini içerir ve en iyi çözümünüz olmayabilir. Her zaman dikkatli olun ve kullanabileceğiniz diğer Kitaplıkların yerel koda veya benzer değişikliklere bağlı olabileceğini unutmayın.

Alternatif Uygulama 1: Yerel isNaNyöntemi değiştirin .

//  Extremely simple. Just simply write the method.
window.isNaN = function(a) { return a !==a; }

Alternatif Uygulama 2: Sayı Nesnesine Ekle
* ECMA 5 ila 6 için bir poli dolgu olduğu için önerildi

Number['isNaN'] || (Number.isNaN = function(a) { return a !== a });
//  Use as simple as
Number.isNaN(NaN)

Boşsa alternatif çözüm testi

Basit bir pencere yöntemi Ben nesne Boş olup olmadığını test yazdı . Öğe "tam" NaN ise vermediği için biraz farklı , ama boş eşyaları ararken de yararlı olabileceğinden bunu attığımı düşündüm.

/** isEmpty(varried)
 *  Simple method for testing if item is "empty"
 **/
;(function() {
   function isEmpty(a) { return (!a || 0 >= a) || ("object" == typeof a && /\{\}|\[(null(,)*)*\]/.test(JSON.stringify(a))); };
   window.hasOwnProperty("empty")||(window.empty=isEmpty);
})();

Misal:


Boş Olduğunda Son Derece Derin Kontrol

Bu sonuncusu, bir nesnenin boş nesnelerle dolu olup olmadığını kontrol ederek biraz derinlere iner. Eminim iyileştirme ve olası çukurlar için yer var, ama şimdiye kadar, her şeyi yakalamak gibi görünüyor.


1
@ PaulD.Waite belki de bu app, ama kabul edilen bir cevap görmüyorum. Aslında, sadece 5 cevap görüyorum, ama görüyorum ki 15
SpYk3HH

1
Hangi uygulamayı kullanıyorsunuz?
Paul

2
@ PaulD.Waite Android için SE biri. s3
SpYk3HH üzerinde

1
Aha. Kendime bakmak için uygulamam yok, ancak kabul edilen cevaba bir bağlantı: stackoverflow.com/a/2652335/20578
Paul

@ PaulD.Waite Ah, anlıyorum. Sanırım, sadece kendi başına soruyu doğrudan yanıtlayarak, bu cevap yeterli olabilir. Ben isNaNgüvenilir değil , çünkü "gerçekten 'NaN" olup olmadığını kontrol etmek için JS yolu toplam ilişkisi içinde başka bir soruya cevabımı yayınladı . Orada yorumlandım ve bu sorunun cevabım için daha iyi olacağını ve böylece buraya taşındığını söyledim. Bu sorunla ilgili olarak Google'ın elindeki konuyla ilgili bir aramada ortaya çıkacak yararlı / yararlı bir şey koymanız yeterlidir is it NaN?. Yan notta, cevabım seçilen cevaptan daha sık doğrudur.
SpYk3HH

5

Sadece başka bir alternatif paylaşmak istiyorum, burada diğerlerinden daha iyi değil, ama bence bakmaya değer:

function customIsNaN(x) { return (typeof x == 'number' && x != 0 && !x); }

Bunun arkasındaki mantık hariç her numara olduğunu 0ve NaNşekilde dökülmüştürtrue .

Hızlı bir test yaptım ve Number.isNaNyanlış için kendini kontrol etmek kadar iyi performans gösteriyor . Üçü de daha iyi performans gösteriyorisNan

Sonuçlar

customIsNaN(NaN);            // true
customIsNaN(0/0);            // true
customIsNaN(+new Date('?')); // true

customIsNaN(0);          // false
customIsNaN(false);      // false
customIsNaN(null);       // false
customIsNaN(undefined);  // false
customIsNaN({});         // false
customIsNaN('');         // false

Kırık isNaNişlevden kaçınmak istiyorsanız yararlı olabilir .


5

Ortamınız ECMAScript 2015'i destekliyorsaNumber.isNaN , değerin gerçekten olduğundan emin olmak için kullanmak isteyebilirsiniz.NaN .

Sorun isNaN, eğer sayısal olmayan verilerle kullanırsanız, çok az kafa karıştırıcı kural vardır (MDN'ye göre) uygulanır. Örneğin,

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

Bu nedenle, ECMA Script 2015 destekli ortamlarda,

Number.isNaN(parseFloat('geoff'))

7
Ortamım yalnızca ECMAScript XP Home Edition'ı destekliyor :(
Paul D.Waite

1
@ PaulD.Waite (Umarım IE 6: D demek istediniz) Sorun değil :-) Sadece bunun isNaNbaşınızı belaya sokabileceğini ve Number.isNaNECMAScript 2015 ortamlarında kullanmayı hatırlayabileceğinizi unutmayın :-)
thefourtheye

5

JavaScript'teki NaN, türü aslında sayı olmasına rağmen "Not A Number" anlamına gelir.

typeof(NaN) // "number"

Bir değişkenin NaN değerine sahip olup olmadığını kontrol etmek için isNaN () işlevini kullanamayız, çünkü isNaN () aşağıdaki sorunu içerir, aşağıya bakın:

var myVar = "A";
isNaN(myVar) // true, although "A" is not really of value NaN

Burada gerçekten olan şey, myVar'ın bir sayıya dolaylı olarak zorlanmasıdır:

var myVar = "A";
isNaN(Number(myVar)) // true. Number(myVar) is NaN here in fact

Aslında mantıklı, çünkü "A" aslında bir sayı değil. Ama gerçekten kontrol etmek istediğimiz şey, myVar'ın tam olarak NaN değeri olup olmadığıdır.

Yani isNaN () yardımcı olamaz. Öyleyse bunun yerine ne yapmalıyız?

NaN'ın kendisine eşit olmayan bir şekilde ele alınan tek JavaScript değeri ışığında,! == kullanarak eşitliğini kendisi kontrol edebiliriz.

var myVar; // undefined
myVar !== myVar // false

var myVar = "A";
myVar !== myVar // false

var myVar = NaN
myVar !== myVar // true

Sonuç olarak , bir değişkenin = == doğru olduğu doğruysa, bu değişken tam olarak NaN değerindedir:

function isOfValueNaN(v) {
    return v !== v;
}

var myVar = "A";
isNaN(myVar); // true
isOfValueNaN(myVar); // false

4

JavaScript'te alt çizgiisNaN işlevini kullanıyorum :

isNaN(undefined) 
-> true

En azından, bu yakalandığının farkında ol.


10
Kafam karıştı. Neden undefinedyanlış iletildiğinde yanlış döndürülüyor ? undefinedBir sayı olmadığı doğru, değil mi?
Xaxis

3
@Xaxis NaN undefined ile eşdeğer kabul edilmemelidir, ikisi de özel ve farklı anlamları olan özel değerlerdir . Şunu düşünün: Bir değere sahibim ama ne olduğunu söylemiyorum, belki bir sayıdır ve belki de sizin bakış açınıza göre tanımsızdır.
Corin

1
@Corin undefinedfarklı bir şey olabilir NaN, ancak yine de bir sayı değilisNaN(undefined)true
neuhaus

4

Belki de bu:

function isNaNCustom(value){
    return value.toString() === 'NaN' && 
           typeof value !== 'string' && 
           typeof value === 'number'
}

3

Görünüşe göre isNaN () kutunun dışında Node.js'de desteklenmiyor.
İle çalıştım

var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);

Tabii, ama Node.js hakkında sormuyordum.
Paul D.Waite



2

Kural:

NaN != NaN

İsNaN () işlevinin sorunu, bazı durumlarda beklenmedik sonuç döndürebilmesidir:

isNaN('Hello')      //true
isNaN('2005/12/12') //true
isNaN(undefined)    //true
isNaN('NaN')        //true
isNaN(NaN)          //true
isNaN(0 / 0)        //true

Değerin gerçekten NaN olup olmadığını kontrol etmenin daha iyi bir yolu:

function is_nan(value) {
    return value != value
}

is_nan(parseFloat("geoff"))

1

IEEE 754'e göre, NaN içeren tüm ilişkiler! = Hariç yanlış olarak değerlendirilir. Dolayısıyla, örneğin, A veya B veya her ikisi de NaN ise (A> = B) = yanlış ve (A <= B) = yanlış.


1

Bu yanıtı başka ne zaman kontrol başka bir soruya StackOverflow yazdım NaN == nullama sonra yinelenen olarak işaretlendi, bu yüzden işimi boşa harcamak istemiyorum.

Hakkında Mozilla Geliştirici Ağı'na bakın NaN.


Kısa cevap

Sadece kullanmak distance || 0olmak istediğiniz zaman emin değeri uygun bir sayıdır veya isNaN()bunu kontrol etmek.

Uzun cevap

NaN (Sayı Değil), bazı matematik işlemleri başarısız olduğunda sık sık döndürülen javascript'teki tuhaf bir Global Nesnedir.

NaN == nullHangi sonuçların olup olmadığını kontrol etmek istediniz false. Hovewer bile NaN == NaNsonuç verir false.

Değişkenin NaNküresel bir işlev olup olmadığını öğrenmenin basit bir yolu isNaN().

Bir diğeri, x !== xsadece x NaN olduğunda doğrudur. (@ raphael-schweikert'e hatırlattığınız için teşekkürler)

Peki neden kısa cevap işe yaradı?

Hadi bulalım.

Aradığınızda NaN == falsesonuç false, ile aynıdır NaN == true.

Spesifikasyonlarda bir yerde JavaScript'in her zaman yanlış değerlere sahip bir kaydı vardır;

  • NaN - Sayı Değil
  • "" - boş dize
  • false - bir mantıksal yanlış
  • null - boş nesne
  • undefined - tanımsız değişkenler
  • 0 - +0 ve -0 dahil olmak üzere sayısal 0

1
“Değişkenin NaN olup olmadığını öğrenmenin sadece basit bir yolu isNaN () işlevidir” - doğru değil; başka bir basit yol daha vardır: var xIsNaN = x !== x;Bu yalnızca x olduğunda doğrudur NaN.
Raphael Schweikert

1

Başka bir çözüm MDN'nin parseFloat sayfasında belirtilmiştir

Sıkı ayrıştırma yapmak için bir filtre işlevi sağlar

var filterFloat = function (value) {
    if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
      .test(value))
      return Number(value);
  return NaN;
}


console.log(filterFloat('421'));               // 421
console.log(filterFloat('-421'));              // -421
console.log(filterFloat('+421'));              // 421
console.log(filterFloat('Infinity'));          // Infinity
console.log(filterFloat('1.61803398875'));     // 1.61803398875
console.log(filterFloat('421e+0'));            // NaN
console.log(filterFloat('421hop'));            // NaN
console.log(filterFloat('hop1.61803398875'));  // NaN

Ve sonra isNaNkontrol etmek için kullanabilirsinizNaN


1

Kontrol etmenin kesin yolu:

//takes care of boolen, undefined and empty

isNaN(x) || typeof(x) ==='boolean' || typeof(x) !=='undefined' || x!=='' ? 'is really a nan' : 'is a number'

1

Bir cazibe gibi çalışan bu küçük işlevi yarattım. Karşı sezgisel görünen NaN'yi kontrol etmek yerine, bir numarayı kontrol edersiniz. Bu şekilde ilk yapan ben olmadığımdan eminim ama paylaşacağımı düşündüm.

function isNum(val){
    var absVal = Math.abs(val);
    var retval = false;
    if((absVal-absVal) == 0){
        retval = true
    }

    return retval;
}

1

Sadece eğlence için başka bir yol buldum.

function IsActuallyNaN(obj) {
  return [obj].includes(NaN);  
}

1

marksyzm'ın cevabı iyi çalışıyor, ancak InfinityInfinity teknik olarak bir sayı olmadığı için yanlış dönmüyor.

i isNumberbir sayı olup olmadığını kontrol edecek bir işlev ile geldi .

function isNumber(i) {
    return !isNaN(i && i !== true ? Number(i) : parseFloat(i)) && [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY].indexOf(i) === -1;
}

console.log(isNumber(Infinity));
console.log(isNumber("asdf"));
console.log(isNumber(1.4));
console.log(isNumber(NaN));
console.log(isNumber(Number.MAX_VALUE));
console.log(isNumber("1.68"));

GÜNCELLEME: bu kod bazı parametreler için başarısız olduğunu fark ettim, bu yüzden daha iyi yaptım.

function isNumber(i) {//function for checking if parameter is number
if(!arguments.length) {
throw new SyntaxError("not enough arguments.");
	} else if(arguments.length > 1) {
throw new SyntaxError("too many arguments.");
	} else if([Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY].indexOf(i) !== -1) {
throw new RangeError("number cannot be \xB1infinity.");
	} else if(typeof i === "object" && !(i instanceof RegExp) && !(i instanceof Number) && !(i === null)) {
throw new TypeError("parameter cannot be object/array.");
	} else if(i instanceof RegExp) {
throw new TypeError("parameter cannot be RegExp.");
	} else if(i == null || i === undefined) {
throw new ReferenceError("parameter is null or undefined.");
	} else {
return !isNaN(i && i !== true ? Number(i) : parseFloat(i)) && (i === i);
	}
}
console.log(isNumber(Infinity));
console.log(isNumber(this));
console.log(isNumber(/./ig));
console.log(isNumber(null));


Sonsuzluğunuz teknik olarak bir sayı teknik olarak kusurlu değildir: math.stackexchange.com/questions/36289/is-infinity-a-number . Cevapları okuduğumdan, bir sayının sonsuzluğunun bağlama bağlı olduğu.
Jon P

Bunu başka bir soruya
taşıyacağım

1
alert("1234567890.".indexOf(String.fromCharCode(mycharacter))>-1);

Bu zarif değil. ama isNAN () denedikten sonra başka bir alternatif olan bu çözüme ulaştım. Bu örnekte ayrıca '.' çünkü şamandıra için maskeliyorum. Hiçbir numara kullanılmadığından emin olmak için bunu tersine çevirebilirsiniz.

("1234567890".indexOf(String.fromCharCode(mycharacter))==-1)

Bu tek karakterlik bir değerlendirmedir, ancak herhangi bir sayı olup olmadığını kontrol etmek için bir dizede de döngü yapabilirsiniz.


1

NaN'yi isNaN javascript işlevini kullanarak kontrol edebilirsiniz. Sadece sayıyı veya değeri isNaN işlevine geçirmek

isNaN(123) //false
isNaN(-1.23) //false
isNaN(5-2) //false
isNaN(0) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2005/12/12') //true
isNaN('') //false
isNaN(true) //false
isNaN(undefined) //true
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0 / 0) //true

0

Sonucu String'e dönüştürün ve 'NaN' ile karşılaştırın.

var val = Number("test");
if(String(val) === 'NaN') {
   console.log("true");
}

0

(NaN> = 0) ? ...... " Ben do not Know ".

function IsNotNumber( i ){
    if( i >= 0 ){ return false; }
    if( i <= 0 ){ return false; }
    return true;
}

Koşullar yalnızca DOĞRU ise uygulanır .

FALSE üzerinde değil .

" Bilmiyorum " da değil .


NaN değerlerini tam tersini aramak istiyorsanız açıkça
kullanmıyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.