549 Stimmen

Wie überprüft man in JavaScript, ob eine Zahl NaN ist?

Ich habe es nur in der JavaScript-Konsole von Firefox versucht, aber keine der folgenden Anweisungen gibt true zurück:

parseFloat('geoff') == NaN;

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

0voto

Billy Hallman Punkte 41

Ich habe diese kleine Funktion erstellt, die wie ein Zauber funktioniert. Anstatt auf NaN zu prüfen, was kontraintuitiv zu sein scheint, prüfen Sie auf eine Zahl. Ich bin ziemlich sicher, ich bin nicht der erste, der es auf diese Weise zu tun, aber ich dachte, ich würde teilen.

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

    return retval;
}

0voto

adddff Punkte 27

Die Antwort von marksyzm funktioniert gut, aber sie liefert nicht false für Infinity da die Unendlichkeit technisch gesehen keine Zahl ist.

Ich habe mir eine isNumber Funktion, die prüft, ob es eine Zahl ist.

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"));

UPDATE: Mir ist aufgefallen, dass dieser Code bei einigen Parametern nicht funktioniert, also habe ich ihn verbessert.

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));

0voto

Peter S McIntyre Punkte 403
alert("1234567890.".indexOf(String.fromCharCode(mycharacter))>-1);

Das ist nicht elegant. Aber nachdem ich isNAN() ausprobiert hatte, kam ich zu dieser Lösung, die eine weitere Alternative ist. In diesem Beispiel habe ich auch '.' zugelassen, weil ich für float maskiere. Sie könnten dies auch umkehren, um sicherzustellen, dass keine Zahlen verwendet werden.

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

Dies ist eine Auswertung für ein einzelnes Zeichen, aber Sie könnten auch eine Schleife durch eine Zeichenkette ziehen, um nach Zahlen zu suchen.

0voto

MetaTron Punkte 627
Number('hello').toString() === 'NaN' // true
Number(undefined).toString() === 'NaN' // true

Number('12345').toString() === 'NaN' // false  

// These all evaluate to 0 which is a number
Number('').toString() === 'NaN' // false // 0
Number('0').toString() === 'NaN' // false // 0
Number().toString() === 'NaN' // false // 0

// These all evaluate to 0 and 1 which is a number
Number(false).toString() === 'NaN' // false // 0
Number(true).toString() === 'NaN' // false // 1

-1voto

Konvertieren Sie das Ergebnis einfach in einen String und vergleichen Sie es mit "NaN".

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X