publicado originalmente en el boletín a Drip of JavaScript.
en JavaScript, el valor especial NaN
(que significa «no es un número») se usa para representar el resultado de un cálculo matemático que no se puede representar como un número significativo., Por ejemplo:
también es posible ejecutar dentro de NaN
cuando se utiliza la etiqueta parseInt
o parseFloat
para extraer un número de una cadena, como en este ejemplo:
Como resultado, los desarrolladores de JavaScript, a menudo necesitan la prueba de un resultado variable para ver si contiene NaN
o si es un valor significativo en su lugar. Hay varias formas diferentes de verificar si un valor es NaN
, pero desafortunadamente la mayoría de ellos no son confiables., Vamos a caminar a través de algunos de ellos y ver cómo fallan.
lo lógico es comprobar si el resultado es igual a NaN
.
Lo que pasa aquí? En JavaScript, NaN
tiene la distinción de ser el único valor que no es igual a sí mismo. Eso significa que no podemos «averiguar si un valor es NaN
marcando la igualdad a NaN
porque la respuesta siempre será no.
¿Qué más podríamos intentar? ¿Qué tal la función incorporada isNaN
?,
¡Impresionante! Este parece funcionar. Y de hecho funciona bajo algunas circunstancias. Sin embargo, a pesar del nombre, el propósito de la función isNaN
no es verificar si un valor es NaN
. En su lugar, el propósito es comprobar si un valor no puede ser coaccionado a un número. Debido a esto, puede devolver falsos positivos., Considere lo siguiente:
a Menos que esté seguro de que usted tendrá que lidiar sólo con números o NaN
, el isNaN
función no muy apto para este propósito.
sin embargo, resulta que ECMAScript 6 crea una nueva función con el propósito específico de verificar si un valor es NaN
. Confusamente, esta función también se llama isNaN
, aunque se adjunta al objeto Number
en lugar de directamente al objeto global., Puede ser utilizado como esto:
Excelente! Tenemos un método que realmente funciona. Desafortunadamente, Number.isNaN
solo está disponible en las versiones más recientes de FireFox y Chrome, y aún no es compatible con IE u otros navegadores principales. Esto puede ser un enfoque viable en el futuro, pero por ahora solo puede ser utilizado en circunstancias muy estrechas.
tal vez podemos comprobar NaN
«s type instead?
Sí, estás leyendo bien., En JavaScript, el valor NaN
es de tipo number
. Eso no va a ser muy útil.
entonces, ¿qué podemos hacer para obtener algo que funcione correctamente, pero que también esté disponible entre navegadores? ¿Recuerdas cómo mencioné que NaN
es el único valor en JavaScript que no es igual a sí mismo? Podemos aprovechar ese hecho.
actualmente la mejor manera de comprobar si un valor es NaN
es comprobar si no es igual a sí mismo. Si es así, entonces usted sabe que es NaN
.,
Por supuesto, el uso de esta técnica no es especialmente legible, por lo que es común envolverlo en un método de utilidad que comunica la intención más claramente. Tanto Underscore como Lo-Dash proporcionan implementaciones.
espero que esto te haya ayudado a comprender mejor las peculiaridades de NaN
.
Gracias por leer!
Josh Clanton