💥 NaN: el número que no es un número
Si alguna vez viste este valor raro en consola:
NaN
Y pensaste: “¿Esto no debería ser un error?”, no estás solo. NaN significa Not a Number, pero lo irónico es que… ¡es de tipo number!
❓ ¿Cómo aparece NaN?
NaN surge cuando una operación matemática intenta convertir algo a number y falla en el intento:
let a = 2 / "foo";
console.log(a); // NaN
console.log(typeof a); // "number"
Esto se debe a que JavaScript intenta hacer coerción de tipos, y cuando no puede, devuelve NaN. Técnicamente, NaN es un número inválido.
😵 El caso más loco: NaN !== NaN
NaN es el único valor en JavaScript que no es igual a sí mismo:
console.log(NaN === NaN); // false
Esto lo vuelve muy difícil de detectar si no sabés este detalle. Por eso existen funciones especiales para “atraparlo”.
🛑 isNaN() NO es seguro
La función global isNaN() intenta ayudarte, pero tiene un comportamiento engañoso porque primero intenta convertir el valor a número antes de compararlo con NaN:
let a = 2 / "foo"; // NaN
let b = "foo"; // String
isNaN(a); // true
isNaN(b); // true ❌ (porque intenta hacer Number("foo") → NaN)
Como podés ver, isNaN("foo") devuelve true, aunque claramente no es un número. 😬
✅ Number.isNaN(): la forma segura
Desde ES6, tenemos una forma más confiable de detectar NaN:
let a = 2 / "foo";
let b = "foo";
Number.isNaN(a); // true ✅
Number.isNaN(b); // false ✅
Number.isNaN() no hace coerción: solo devuelve true si el valor ya es estrictamente NaN.
📌 En resumen
- NaN es de tipo
number, pero significa “resultado inválido”. NaN !== NaN, por lo tanto no lo podés detectar con igualdad.isNaN()puede fallar porque convierte valores antes de chequear.Number.isNaN()es la forma segura y moderna de verificarlo.
🔗 Recursos adicionales
Deja un comentario