JavaScript: compruebe si la variable es un número

En este tutorial, cubriremos cómo verificar si una variable es un número en JavaScript. Usaremos las funciones isNan(), typeOf() e isFinite() para hacerlo.

Introducción

JavaScript es un lenguaje de tipo dinámico, lo que significa que el intérprete determina el tipo de la variable en tiempo de ejecución. En la práctica, esto nos permite usar la misma variable para almacenar diferentes tipos de datos en el mismo código. También significa que sin documentación y consistencia, no siempre sabemos el tipo de una variable en nuestro código cuando la usamos.

Operar en una cadena o matriz cuando esperamos un número puede generar resultados extraños en nuestro código. En este artículo, veremos varias funciones que pueden ayudar a determinar si una variable que estamos usando es un número.

No se deben aceptar cadenas que contengan números como "10". En JavaScript, los valores especiales como NaN, Infinity e -Infinity también son números; sin embargo, ignoraremos esos valores.

Con estos requisitos, la mejor función para usar es la función esFinito() del objeto integrado Number.

Sin embargo, los desarrolladores han usado comúnmente otras funciones para este propósito, particularmente Number.isNaN() y la función typeof().

Vamos a crear algunas variables para probar:

1
2
3
4
5
6
7
let intVar = 2;
let floatVar = 10.5;
let stringVar = '4';
let nanVar = NaN;
let infinityVar = Infinity;
let nullVar = null;
let undefinedVar = undefined;

Usando la función Number.isFinite()

La función Number.isFinite() comprueba si la variable es un número, pero también comprueba si es un valor finito. Por lo tanto, devuelve falso en números que son NaN, Infinito o -Infinito.

Vamos a probarlo con las variables que hemos definido anteriormente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> Number.isFinite(intVar);
true
> Number.isFinite(floatVar);
true
> Number.isFinite(stringVar);
false
> Number.isFinite(nanVar);
false
> Number.isFinite(infinityVar);
false
> Number.isFinite(nullVar);
false
> Number.isFinite(undefined);
false

Es exactamente lo que queríamos. Los números especiales no finitos se ignoran, así como cualquier variable que no sea un tipo de número.

Si desea comprobar si una variable es un número, lo mejor que puede hacer es utilizar la función Number.isFinite().

Usando la función Number.isNaN()

El objeto Number estándar tiene un método isNaN(). Toma un argumento y determina si su valor es NaN. Como queremos verificar si una variable es un número, usaremos el operador not, !, en nuestras comprobaciones.

Ahora vamos a comprobar si el operador not y la función Number.isNaN() pueden filtrar solo números:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> !Number.isNaN(intVar);
true
> !Number.isNaN(floatVar);
true
> !Number.isNaN(stringVar);
true # Wrong
> !Number.isNaN(nanVar);
false
> !Number.isNaN(infinityVar);
true # Wrong
> !Number.isNaN(nullVar);
true # Wrong
> !Number.isNaN(undefinedVar);
true # Wrong

Este método es bastante permisivo ya que acepta valores que no son números en absoluto. Este método es el más adecuado para cuando sabe que tiene un número y verificaría si es un valor NaN, no para la verificación general de números.

Usando la función typeof()

La función typeof() es una función global que acepta una variable o valor como argumento y devuelve una representación de cadena de su tipo. JavaScript tiene 9 tipos en total:

  • indefinido
  • booleano
  • número
  • cadena
  • bigint
  • símbolo
  • objeto
  • null (typeof() se muestra como objeto)
  • función (un tipo especial de objeto)

Para verificar si una variable es un número, simplemente necesitamos comprobar si el valor devuelto por typeof() es "number". Vamos a probarlo en las variables de prueba:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> typeof(intVar) == 'number';
true
> typeof(floatVar) == 'number';
true
> typeof(stringVar) == 'number';
false
> typeof(nanVar) == 'number';
true # Wrong
> typeof(infinityVar) == 'number';
true # Wrong
> typeof(nullVar) == 'number';
false
> typeof(undefined) == 'number';
false

La función typeof() funciona mucho mejor que Number.isNaN(). Determina correctamente que una variable de cadena, null e undefined no son números. Sin embargo, devuelve verdadero para NaN e Infinity.

Si bien ese es el resultado técnicamente correcto, NaN e Infinity son valores numéricos especiales, para la mayoría de los casos de uso preferiríamos ignorarlos.

Conclusión

En este artículo, aprendimos cómo verificar si una variable en JavaScript es un número. La función Number.isNaN() solo es adecuada si sabemos que nuestra variable es un número y necesitamos verificar si es específicamente NaN o no.

La función typeof() es adecuada si su código puede funcionar con NaN, Infinity o -Infinity, así como con otros números.

El método Number.isFinite() captura todos los números finitos y fue el más apropiado para nuestros requisitos.