Come posso verificare se il valore di input è NaN
o meno senza utilizzare la funzione isNaN
?Come stabilire se il valore è NaN senza utilizzare isNaN, che ha falsi positivi?
risposta
Se è possibile utilizzare ECMAScript 6, hai Object.is
:
return Object.is(obj, NaN);
In caso contrario, qui è un'opzione, dal codice sorgente di underscore.js:
// Is the given value `NaN`?
_.isNaN = function(obj) {
// `NaN` is the only value for which `===` is not reflexive.
return obj !== obj;
};
anche la loro nota per quella funzione:
Nota: questa non è la stessa cosa della funzione nativa isNaN, che restituirà anche true se la variabile non è definita.
'isNaN ('0') === false', mentre' _.isNaN ('0') 'è vero. –
'isNaN ('as')' è 'true', ma' _.isNaN ('as') 'è' false'. –
@RobW In cosa? Questo è un bug per spec. Per spec. L'unica cosa non strettamente uguale a se stessa è NaN. – gsnedders
Convert l'ingresso ad un numero, e verificare se la sottrazione non è zero:
var x = 'value';
var is_NaN = +x - x !== 0; // The + is actually not needed, but added to show
// that a number conversion is made.
Che dire di 'x = Infinity'? – Kobi
@Kobi: 'Infinity-Infinity' è' NaN' :-P –
@Kobi 'isNaN (Infinity)' restituisce 'false', e il mio metodo restituisce true. Infinity non è un [numero reale] (https://secure.wikimedia.org/wikipedia/en/wiki/Real_number), quindi credo che la mia implementazione sia migliore (non esitate a contestare me). –
Perché si bisogno di questo? Inoltre, questa è una domanda molto "dammi il codez", quindi ... no, non ti aiuteremo. –
Ho una vite che ho bisogno di avvitare, ma non voglio usare un cacciavite. No, non ti dirò perché non userò un cacciavite. Fammi sapere, grazie. – asawyer
Questi compiti? Non riesco a pensare ad alcun'altra ragione per cui vorresti assegnare un ruolo alla funzione 'isNaN'. – JaredPar