El acrónimo NaN
es un valor especial de Javascript que significa literalmente Not A Number (No es un número). Sin embargo, no hay que dejarse llevar por su significado literal, ya que nos podría dar lugar a malentendidos. El valor NaN
, a pesar de su significado, se usa para representar valores numéricos (y ahora es donde viene el matiz) que son indeterminados o imposibles de representar como número.
Dentro de esa categoría hay varios:
0 / 0
.4 - 'a'
, ya que es imposible restar una letra a un número.NaN
: Por ejemplo, NaN + 4
, ya que el primer operando es NaN
.Uno de los más frecuentes es el segundo, ya que Javascript es un lenguaje flexible que no requiere tipos. Eso, unido a que la mayoría de datos que extraemos de una página web se obtienen como
Por aquí puedes encontrar las propiedades y métodos relacionados con NaN
que existen:
Propiedad o Método | Descripción |
---|---|
Number.NaN |
Es equivalente a NaN . Valor que no puede representarse como número. |
Number.isNaN(number) |
Comprueba si number no es un número. |
Observa que aunque NaN
es un valor global, también existe un Number.NaN
como propiedad de Number
, para tenerlo modularizado y encapsulado como propiedad estática en el objeto Number
.
Como hemos dicho, el valor NaN
se utiliza para intentar representar un valor que no se puede representar. Sin embargo, no podemos compararlo literalmente con NaN
, sino que tenemos que usar la función Number.isNaN()
:
NaN == NaN; // false (El valor no es el mismo)
NaN === NaN; // false (Ni el valor, ni el tipo de dato es el mismo)
Number.isNaN(NaN); // true (Forma correcta de comprobarlo)
Number.isNaN(5); // false (5 es un número, no es un NaN)
Number.isNaN("A"); // false ("A" es un string, no es un NaN)
Recuerda que aunque desafortunamente, NaN
significa Not A Number (no es un número), pero NaN
sí que es un valor numérico, lo que ocurre es que ese valor no es representable de forma numérica:
const number = NaN;
typeof number; // "number"
number.constructor.name; // "Number"
Si intentamos convertir un valor NaN
a otro tipo de dato primitivo utilizando un typecast (forzar conversión explícita), nos encontraremos lo siguiente:
Boolean(NaN); // false (convertimos a booleano)
String(NaN); // "NaN" (convertimos a texto)
Number(NaN); // NaN (Ya estaba en contexto numérico)
Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.
Puedes encontrar más sobre mi en Manz.dev