2009-02-18 18 views
8

si quiero probar el resultado de una expresión y la función devolvería NaN ¿cómo verificaría eso?
ejemplos:
$('amount').value.toInt()!='NaN'
^no funciona y supongo que el valor devuelto no es una cadena,
$('amount').value.toInt()!=NaN
^doesnt parecen funcionar bien y éste parece obvio

Entonces, ¿cómo comprobado si el valor devuelto no es un numero?¿Cuál es la palabra reservada para NaN en javascript?

+0

Se emite undefined por lo general para cualquier tipo de locura. –

Respuesta

36

El valor NaN se define como desigual a todo, incluido a sí mismo. Pruebe si un valor es NaN con la función isNaN(), de manera adecuada. (ECMAScript 6 agrega una función Number.isNan() con una semántica diferente para argumentos sin número, pero no es compatible en todos los navegadores hasta 2015).

Hay dos propiedades integradas disponibles con un valor NaN: la propiedad global NaN (es decir, window.NaN en los navegadores) y Number.NaN. Es no una palabra clave de idioma. En los navegadores más antiguos, la propiedad NaN podría sobrescribirse, con resultados potencialmente confusos, pero con el ECMAScript 5 standard it was made non-writable.

  • Como @some señaló en los comentarios, también existe la función global isFinite() que puede ser útil.
+0

muchas gracias :) realmente ayudó + 20rep para usted – lock

+0

@lock, es 10 para una votación y 15 para una aceptación, entonces eso es 25 (a menos que las cosas hayan cambiado recientemente). Y aquí hay otros 10, @Miles. – paxdiablo

+1

lo siento, las matemáticas equivocadas, gracias de nuevo a la comunidad de programación muy útil – lock

1

El operador de igualdad (== y ===) no se puede usar para probar un valor con respecto a NaN. Use Number.isNaN() o isNaN() en su lugar.

NaN === NaN;  // false 
Number.NaN === NaN; // false 
isNaN(NaN);   // true 
isNaN(Number.NaN); // true 
2

la mejor manera de comprobar el resultado de la operación numérica contra NaN es aproach esta manera, ejemplo:

var x = 0; 
var y = 0; 
var result = x/y; // we know that result will be NaN value 
// to test if result holds a NaN value we should use the following code : 

if(result !=result){ 
console.log('this is an NaN value'); 
} 

y se hace.

el truco es que NaN no se puede comparar con cualquier otro valor, incluso con él mismo (NaN! = NaN es siempre verdad para que podamos tomar ventaja de esto y comparar resultado contra sí mismo)

esto es JavaScript (un lenguaje bueno y extraño)

Cuestiones relacionadas