quitar number isnan como javascript nan

number - ¿Cómo se prueba para NaN en JavaScript?



parseint jquery nan (2)

Tengo una variable x y quiero probar si x está configurado en NaN. ¿Cómo puedo hacer eso?

Mi primer instinto es probablemente, ya sabes, probarlo, así:

if (x === NaN) { ...

Conejo tonto, no, eso sería demasiado fácil. NaN es como NULL en SQL, no es igual a nada, ni a sí mismo.

Pero mira, hay una función llamada isNaN() - ¡quizás eso lo haga!

No, hasta donde puedo decir, isNaN() tiene isNaN() valor.

Por ejemplo, isNaN([""]) devuelve correctamente false, pero isNaN(["."]) Devuelve true. No quieres saber cómo me enteré de este defecto.

¿Cómo hago esto?

Resulta que mi pregunta es un duplicado de esta , pero la respuesta seleccionada es incorrecta. La respuesta correcta tiene un 20% más de votos a favor.


La pregunta tiene la respuesta si lees lo suficiente. Así lo encontré: estaba escribiendo la pregunta y ... bingo.

¿Recuerdas cuando escribí " NaN es como NULL en SQL, no es igual a nada, ni a sí mismo"? Hasta donde sé, NaN es el único valor en Javascript con esta propiedad. Por lo tanto puedes escribir:

var reallyIsNaN = function(x) { return x !== x; };


Respuesta corta

Para usuarios de ECMAScript-5:

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

Para las personas que usan ECMAScript-6:

#2 Number.isNaN(x);

Y para fines de coherencia en ECMAScript 5 y 6, también puede usar este polyfill para Number.isNan

#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; }

Nota: Prefiero probar usando el n. ° 1, que funciona igual en todos los lugares y no depende del último JS también. (Siempre me da el resultado correcto. ¡Sin sorpresas!)

Explicación detallada:

Aquí está nuestro increíble NaN

NaN == NaN; // false NaN === NaN; // false

Por favor, no culpe a JavaScript por esto, es NaN el que se supone que debe comportarse de esta manera también en otros idiomas, lo cual está bien según el razonamiento de todas las comparaciones que devuelven valores falsos de NaN

Entonces viene isNaN como nuestro salvador, pero espera, actúa de manera poco diferente en algunos escenarios como

isNaN(undefined); // true isNaN({}); // true isNaN("lorem ipsum"); // true

Tuve algunas caras extrañas al ver los resultados anteriores. Y aquí viene la razón de MDN

Cuando el argumento de la función isNaN no es del tipo Número, el valor se convierte primero en un Número. El valor resultante se prueba para determinar si es NaN.

Entonces, ¿cómo deberíamos probar NaN para las variables que no son números? Siempre voy por lo siguiente

if(x !== x) { console.info(''Is a NaN''); } else { console.info(''Not a NaN''); }

Actualizaciones de ECMAScript-6 / JavaScript-2015

¿Tenemos algo en ECMAScript-6 para lo mismo? Sí lo hacemos ...

Number.isNaN(x); // true

La implementación de ES6 también será útil para los casos anteriores como

Number.isNaN(undefined); // false Number.isNaN({}); // false Number.isNaN("lorem ipsum"); // false

mientras que la función global ECMAScript-5 isNaN salidas de isNaN en true para los casos anteriores, que a veces pueden no alinearse con nuestras expectativas.