valores validate quitar number error como javascript function nan parseint parsefloat

javascript - validate - ¿NaN es igual a NaN?



validate nan javascript (8)

parseFloat("NaN")

devuelve "NaN", pero

parseFloat("NaN") == "NaN"

devuelve falso. Ahora, probablemente sea bueno que devuelva falso, pero no entiendo cómo es esto. ¿Los creadores de JavaScript simplemente hicieron de este un caso especial? Porque de lo contrario no puedo entender cómo esto devuelve falso.



En ECMAScript 6 Object.is () es una mejora de ===. Este método acepta dos argumentos y devuelve verdadero si los valores son equivalentes. Y los dos valores se consideran equivalentes cuando son del mismo tipo y tienen el mismo valor. Esa es la razón porque console.log (Object.is (NaN, NaN)) -> TRUE


Es un caso especial, NaN es lo único en Javascript que no es igual a sí mismo.

Aunque las otras respuestas sobre cadenas frente al objeto NaN son correctas también.


Estoy trabajando con Google Apps Script y estoy atrapado con ECMA 5. Similar a la respuesta de Electric Coffee, esto es lo que pude descubrir que parece dar una respuesta segura sobre si un valor es realmente NaN , no si un valor es NaN pero si es realmente NaN mismo:

function isThisNaN(x) { return isNaN(x) && Object.prototype.toString.call(x) === ''[object Number]''; } console.log(isThisNaN(NaN)); // true

jaja. Es gracioso para mí que Object.prototype.toString.call(NaN) igual a ''[object Number]'' . Mi cerebro novato me dice que NaN es "No es un número", pero lamentablemente no es tan simple.

EDITAR: Creo que debería haber dicho cómo terminé en este artículo. Fui con la idea de que seguramente una cadena que no contiene un número no sería tratada como un número ... bueno, terminé descubriendo esto:

isNaN(''a''); // true isNaN('' ''); // false

por lo tanto, aunque '' '' es una cadena no numérica, aparentemente se engatusa en un número ( 0 ).

console.log(Number('' '')); // 0.0

sin embargo...

console.log( 0 ? true : false); // false console.log('' '' ? true : false); // true

Después de leer más lo entiendo un poco mejor, pero ¡vaya! Qué basura mental para un novato, lol


NaN es uno de los pocos ejemplos de un objeto que no es igual a sí mismo. De hecho, esta misma propiedad se usa para implementar el método common bool IsNaN(number) :

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


isNaN funciona para todos los valores que no son números

isNaN(''foo'') == true isNaN(NaN) == true isNaN(12) == false isNaN([1,2,3]) == true

Si, sin embargo, desea verificar NaN específicamente, o evitar la coerción de tipo;
puedes usar Number.isNaN en Number.isNaN lugar

Number.isNaN(''foo'') == false Number.isNaN(NaN) == true Number.isNaN(12) == false Number.isNaN([1,2,3]) == false


Actualización 2

Nuevo en ECMAScript 6 es la función Object.is() . Esto está diseñado para ser una mejora adicional del control === . Una de las ventajas de esta nueva función es que Object.is(NaN, NaN) ahora devolverá verdadero. Si puede utilizar ECMAScript 6 , esta sería la solución más legible y consistente para usted.

Original

La forma correcta de verificar esto sería:

isNaN(parseInt(variable))

Si lo que está comprobando es un NaN, esa función volverá a ser verdadera. Este método está integrado en las especificaciones de JavaScript.

Usando jQuery

jQuery incorporó su propia función isNaN originalmente para ayudar a contrarrestar algunas discrepancias entre los navegadores, y agregar algunas comprobaciones adicionales para que su versión se pueda usar en lugar de la de VanillaJS.

Actualización para jQuery

Después de jQuery 1.7, cambiaron esta función a $.isNumeric() .

Documentación del interruptor

Si isNaN() un vistazo a esta pregunta sobre el desbordamiento de la pila , encontrarás muchas veces donde isNaN() devuelve lo que intuitivamente se consideraría una respuesta "incorrecta", pero es correcta según la especificación.

Una de las razones principales para evitar el vainilla isNaN() es que null devolverá false , haciéndolo pensar que es un número. Sin embargo, la función jQuery cubre una gama mucho más amplia de resultados intuitivos.

De su documentación:

A partir de jQuery 3.0 $ .isNumeric () devuelve verdadero solo si el argumento es de tipo número, o si es de tipo cadena y se puede forzar en números finitos. En todos los demás casos, devuelve falso.


  • Cuando Number (devuelto por ParseFloat) se compara con string string convertido a Number
  • NaN no es igual a ningún otro objeto (incluido NaN )

NaN==NaN . Es falso por segunda regla.