Wie kann ich überprüfen, ob der Eingabewert NaN
ist oder nicht, ohne die isNaN
Funktion zu verwenden?Wie kann man feststellen, ob der Wert NaN ist, ohne isNaN zu verwenden, was falsche positive Ergebnisse hat?
Antwort
Wenn Sie ECMAScript 6 verwenden können, müssen Sie Object.is
:
return Object.is(obj, NaN);
Ansonsten ist hier eine Option, aus dem Quellcode von underscore.js:
// Is the given value `NaN`?
_.isNaN = function(obj) {
// `NaN` is the only value for which `===` is not reflexive.
return obj !== obj;
};
Auch ihre Note für die Funktion:
Hinweis: Dies ist nicht dasselbe wie die native Funktion isNaN, die auch true zurückgibt, wenn die Variable nicht definiert ist.
'isNaN ('0') === false', wahrend' _.isNaN ('0') 'wahr ist. –
'isNaN ('as')' ist 'wahr', aber '_.isNaN ('as')' ist 'false'. –
@RobW In was? Das ist ein Fehler pro Spezifikation. Pro Spec ist NaN das einzige, was nicht unbedingt mit sich selbst übereinstimmt. – gsnedders
konvertieren die Eingabe in einer Reihe, und prüfen Sie, ob die Substraktion nicht Null ist:
var x = 'value';
var is_NaN = +x - x !== 0; // The + is actually not needed, but added to show
// that a number conversion is made.
Was ist mit x = Infinity? – Kobi
@Kobi: 'Infinity-Infinity' ist' NaN' :-P –
@Kobi 'isNaN (Infinity)' gibt 'false' zurück, und meine Methode gibt true zurück. Infinity ist keine [reelle Zahl] (https://secure.wikimedia.org/wikipedia/de/wiki/Real_number), daher glaube ich, dass meine Implementierung besser ist (zögern Sie nicht, mich zu bestreiten). –
Warum würden Sie diese brauchen? Plus, das ist sehr viel "gib mir die Codez" Nachfrage, also ... nein, wir werden nicht helfen. –
Ich habe eine Schraube die ich einschrauben muss, aber ich möchte keinen Schraubenzieher benutzen. Nein, ich werde dir nicht sagen, warum ich keinen Schraubenzieher brauche. Lass es mich wissen, danke. – asawyer
Sind das Hausaufgaben? Ich kann mir keinen anderen Grund vorstellen, warum Sie eine "isNaN" -Funktion übernehmen möchten. – JaredPar