2016-08-19 5 views
-1

Ist es möglich, so etwas zu schreiben:Wenn alles NaN Equals

if(* === NaN){ 
      this = 0; 
     }; 

Was ich versuche jede mathematische oder Variablen zu tun ist, fangen die als NaN berechnen und gleich 0 mache ich das schreiben konnte Gleiches if-Statement für jedes Mal, wenn Mathe gemacht wird, aber es wäre chaotisch und ich hatte gehofft, dass es eine einfache Lösung wie diese gibt.

+1

Nichts gibt gleich 'NaN'. Sogar 'NaN === NaN; // false' –

+0

Nun, Sie müssten ['isNaN'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) verwenden, und Sie können nicht zuweisen zu "diesem". 'this = anything' ist ungültig. –

+0

Sie müssen sich alle Variablen anschauen, es gibt kein "alles" – epascarello

Antwort

0

Sie können

function convertIfNaN (x) { 
    if (isNaN(x)) 
     return 0; 
    else 
     return x; 
} 
0

wie diese etwas tun Sie die isNaN Funktion wie so verwenden können:

if (isNaN(x)) { 
    // do something 
} 

Die in isNaN Funktion eingebaut wird nur prüfen, ob der Wert in eine Zahl umgewandelt werden kann .

function isNaN(x){ 
    return x !== x; 
} 
+0

Ich denke, das ist am nächsten zu dem, was ich erreichen wollte. Es scheint, dass die einfache clevere Code-Option nicht wirklich zur Situation passt und ich habe einfach eine Kopie einer kleinen if-Anweisung kopiert, um jedes Mal zu überprüfen, wann die Variable verwendet wird, bevor sie verwendet wurde.Vielen Dank! –

-1

Ich werde gehen müssen, um voran und Gegenantworten hier gepostet: Sie können auch Ihre eigene Funktion einfach überprüfen für den Wert „NaN“ wie so schreiben verwenden Sie nicht die globale isNaN() Funktion in JavaScript. Es ist sehr schlecht benannt, weil die Art, wie es funktioniert, nicht mit seiner Signatur übereinstimmt. Es überprüft tatsächlich, ob das Argument, das Sie in übergeben haben, in NaN konvertiert wird, wenn es als Teil des mathematischen Ausdrucks verwendet wird. Oder noch einfacher ausgedrückt: Wenn Sie versuchen, das Argument in eine Zahl zu konvertieren, kann es konvertiert werden. Hier sind einige Beispiele zur Illustration:

console.log("A number: ", isNaN(42))// it is not "not a number" 
 
console.log("A mathematical concept: ", isNaN(Infinity)) // not a "not a number" still 
 
console.log("NaN: ", isNaN(NaN))// naturally, NaN is not a number 
 
console.log("A garbage operation: ", isNaN(42 * "watermelon"))// its meaningless mathematically, so it produces NaN as a result 
 
console.log("A letter: ", isNaN("a"))// clearly not an NaN value, but if converted to a number, it would be 
 
console.log("An object: ", isNaN({}))// same as above 
 

 
//entering some more bizarre territory 
 
console.log("An empty string: ", isNaN("")) //really? Yes - it will be converted to a zero, hence it is actually a number 
 
console.log("An empty array: ", isNaN([])) //an empty array converts to an empty string first, then to a zero 
 
console.log("An array with values: ", isNaN(["a", "b", "c"])) //nope, can't convert to a number 
 
console.log("Another array with values: ", isNaN([1, 2, 3])) //neither can this 
 
console.log("An array with a single value: ", isNaN([1])) //of course this can...because it's a SINGLE numeric value in the array

Und so weiter und so fort. Das Verhalten ist nicht unvorhersehbar, aber es ist definitiv nicht das, was Sie vermuten würden, nämlich dass Sie bemerkt hätten, dass isNaN einen sehr schlechten Job macht, Ihnen zu sagen, ob das Argument tatsächlichNaN ist.

Verwenden Sie stattdessen die Number.isNaN() function, die Sie korrekte Ergebnisse

console.log("A number: ", Number.isNaN(42)) 
 
console.log("A mathematical concept: ", Number.isNaN(Infinity)) 
 
console.log("A letter: ", Number.isNaN("a")) 
 
console.log("An object: ", Number.isNaN({})) 
 
console.log("An empty string: ", Number.isNaN("")) 
 
console.log("An empty array: ", Number.isNaN([])) 
 
console.log("An array with values: ", Number.isNaN([1, 2, 3])) 
 

 
console.log("NaN: ", Number.isNaN(NaN))