Javascript Avanzado VI

💥 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…

💥 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