Tipos de datos

Naturaleza del contenido de una variable

En Javascript, al igual que en la mayoría de los lenguajes de programación, al declarar una variable y guardar su contenido, también le estamos asignando un tipo de dato, ya sea de forma implícita o explícita. El tipo de dato no es más que la naturaleza de su contenido: contenido numérico, contenido de texto, etc...

¿Qué tipos de lenguajes existen?

A grandes rasgos, nos podemos encontrar con dos tipos de lenguajes de programación:

  • Lenguajes estáticos: Cuando creamos una variable, debemos indicar el tipo de dato del valor que va a contener. En consecuencia, el valor asignado finalmente, siempre deberá ser del tipo de dato que hemos indicado (si definimos que es un número debe ser un número, si definimos que es un texto debe ser un texto, etc...).

  • Lenguajes dinámicos: Cuando creamos una variable, no es necesario indicarle el tipo de dato que va a contener. El lenguaje de programación se encargará de deducir el tipo de dato (dependiendo del valor que le hayamos asignado).

En el caso de los lenguajes dinámicos, realmente el tipo de dato se asocia al valor (en lugar de a la variable). De esta forma, es mucho más fácil entender que a lo largo del programa, dicha variable puede «cambiar» a tipos de datos diferentes, ya que la restricción del tipo de dato está asociada al valor y no a la variable en sí. No obstante, para simplificar, en los primeros temas siempre hablaremos de variables y sus tipos de datos respectivos.

Javascript pertenece a los lenguajes dinámicos, ya que automáticamente detecta de que tipo de dato se trata en cada caso, dependiendo del contenido que le hemos asignado a la variable.

Para algunos desarrolladores —sobre todo, nóveles— esto les resulta una ventaja, ya que es mucho más sencillo declarar variables sin tener que preocuparte del tipo de dato que necesitan. Sin embargo, para muchos otros desarrolladores —generalmente, avanzados— es una desventaja, ya que pierdes el control de la información almacenada y esto en muchas ocasiones puede desembocar en problemas o situaciones inesperadas.

En Javascript existen mecanismos para convertir o forzar los tipos de datos de las variables, sin embargo, muchos programadores prefieren declarar explícitamente los tipos de datos, ya que les aporta cierta confianza y seguridad. Este grupo de desarrolladores suelen optar por utilizar lenguajes como Typescript, que no es más que «varias capas de características añadidas» a Javascript.

En muchas ocasiones (y de manera informal) también se suele hacer referencia a lenguajes tipados (tipado fuerte, o fuertemente tipado) o lenguajes no tipados (tipado débil, debilmente tipado), para indicar si el lenguaje requiere indicar manualmente el tipo de dato de las variables o no, respectivamente.

¿Qué son los tipos de datos?

En Javascript disponemos de los siguientes tipos de datos principales:

Tipo de dato Descripción Ejemplo básico
Number Valor numérico (enteros, decimales, etc...) 42
BigInt Valor numérico grande 1234567890123456789n
String Valor de texto (cadenas de texto, carácteres, etc...) 'MZ'
Boolean Valor booleano (valores verdadero o falso) true
undefined Valor sin definir (variable sin inicializar) undefined
Function Función (función guardada en una variable) function() {}
Symbol Símbolo (valor único) Symbol(1)
Object Objeto (estructura más compleja) {}

Para empezar, nos centraremos en los números, textos y booleanos, denominados los tipos de datos primitivos. En los siguientes temas veremos más detalles sobre los demás.

Para saber que tipo de dato tiene una variable, debemos observar que valor le hemos dado. Si es un valor numérico, será de tipo number. Si es un valor de texto, será de tipo string, si es verdadero o falso, será de tipo booleano. Veamos un ejemplo en el que identificaremos que tipo de dato tiene cada variable:

var text = "Hola, me llamo Manz";
var number = 42;
var boolean = true;
var notDefined; // undefined

Como se puede ver, en este ejemplo, es muy sencillo saber que tipos de datos tienen cada variable.

¿Qué tipo de dato tiene?

Nos encontraremos que muchas veces no resulta tan sencillo saber que tipo de dato tiene una variable, o simplemente viene oculto porque el valor lo devuelve una función o alguna otra razón similar. Hay varias formas de saber que tipo de dato tiene una variable en Javascript:

Utilizando typeof()

Si tenemos dudas, podemos utilizar la función typeof, que nos devuelve el tipo de dato de la variable que le pasemos por parámetro. Veamos que nos devuelve typeof() sobre las variables del ejemplo anterior:

console.log(typeof text);       // "String"
console.log(typeof number); // "Number"
console.log(typeof boolean); // "Boolean"
console.log(typeof notDefined); // undefined

Como se puede ver, mediante la función typeof podremos determinar que tipo de dato se esconde en una variable. Observa también que la variable u, al haber sido declarada sin valor, Javascript le da un tipo de dato especial: undefined (sin definir).

OJO: La función typeof() no nos servirá para variables con tipos de datos más complejos, ya que siempre los mostrará como object. Es mejor utilizar constructor.name.

Utilizando constructor.name

Más adelante, nos encontraremos que en muchos casos, typeof() resulta insuficiente porque en tipos de datos más avanzados simplemente nos indica que son objetos. Con constructor.name podemos obtener el tipo de constructor que se utiliza, un concepto que veremos más adelante dentro del tema de clases. De momento, si lo necesitamos, podemos comprobarlo así:

console.log(text.constructor.name);       // String
console.log(number.constructor.name); // Number
console.log(boolean.constructor.name); // Boolean
console.log(notDefined.constructor.name); // ERROR, sólo funciona con variables definidas

OJO: Sólo funciona en variables definidas (no undefined) y sólo en o superiores.

Que Javascript determine los tipos de datos automáticamente no quiere decir que no debamos preocuparnos por ello. En muchos casos, debemos conocer el tipo de dato de una variable e incluso necesitaremos convertirla a otros tipos de datos antes de usarla. Más adelante veremos formas de convertir entre tipos de datos.

Tabla de contenidos