Tipos en Javascript: qué son los tipos de datos, qué tipos soporta Javascript, desde los más básicos como los numericos, boleanos y las cadenas de texto, hasta otros más complejos como los objetos.
En el artículo anterior del Manual de Javascript ya empezamos a mostrar que en una variable podemos almacenar distintos tipos de información. No obstante, todavía hay algunas cosas que queremos explicar sobre los distintos tipos de datos disponibles en Javascript.
En nuestros scripts vamos a manejar variables diversas clases de información, como textos o números. Cada una de estas clases de información son los tipos de datos Todos los datos que se puedan guardar en variables van a estar encajadas en uno de los tipos de datos disponibles en el lenguaje.
Qué son tipos de datos
Antes de comenzar a ver los tipos de datos en Javascript vamos a pararnos para definir mejor qué es un tipo de datos.
Un tipo de datos es un conjunto de valores que comparten unos determinados atributos, sobre los que podemos hacer unas determinadas operaciones. Los lenguajes de programación usan los tipos de datos para definir y acotar los valores que podrían contener las variables y definir qué tipos de operaciones que podríamos realizar con ellos.
Existen tipos de datos clásicos que se encuentran en la mayoría de los lenguajes de programación, como los tipos de datos numéricos, las cadenas de caracteres o los tipos de datos boleanos. A estos tipos de datos se les conoce como tipos de datos primitivos. Pero también existen tipos de datos un poco más avanzados, como los arrays u objetos, a los que se les suele llamar tipos de datos compuestos.
Tipos de datos primitivos en Javascript
Los tipos de datos simples o tipos de datos primivivos que distingue Javascript son tres. Veamos detenidamente cuáles son estos tres tipos de datos.
Tipo de datos numérico
En este lenguaje sólo existe un tipo de datos numérico, al contrario que ocurre en la mayoría de los lenguajes más conocidos. Todos los números son por tanto del tipo numérico, independientemente de si son números reales (con decimales) o números enteros (sin decimales), incluso independientemente de la precisión que tengan.
Los números enteros son números que no tienen coma, como 3 o 339. Los números reales son números fraccionarios, como 2.69 o 0.25, que también se pueden escribir en notación científica, por ejemplo 2.482e12.
Vamos a ver algunos ejemplos de variables creadas con tipos de datos numéricos:
let entero = 22;
let real = 4.9;
let realNotacionCientifica = 1.23e+22;
Con Javascript también podemos escribir números en otras bases, como la hexadecimal. Las bases son sistemas de numeración que utilizan más o menos dígitos para escribir los números. Existen tres bases con las que podemos trabajar
- Base 10, es el sistema que utilizamos habitualmente, el sistema decimal. Cualquier número, por defecto, se entiende que está escrito en base 10.
- Base 8, también llamado sistema octal, que utiliza dígitos del 0 al 7. Para escribir un número en octal basta con escribir ese número precedido de un 0, por ejemplo 045.
- Base 16 o sistema hexadecimal, es el sistema de numeración que utiliza 16 dígitos, los comprendidos entre el 0 y el 9 y las letras de la A a la F, para los dígitos que faltan. Para escribir un número en hexadecimal debemos escribirlo precedido de un cero y una equis, por ejemplo 0x3EF.
let enteroBase10 = 598;
let enteroBase8 = 077;
let enteroBase16 = 0x6F8A;
Tipo boleano
El tipo bolean, boolean en inglés, sirve para guardar un valor lógico: si o no. Dicho de otro modo los tipos boleanos permiten solamente dos tipos de valores, verdadero o falso. Se utiliza para realizar operaciones lógicas, generalmente para realizar acciones si el contenido de una variable es verdadero o falso.
Este tipo de datos generalmente lo usamos para tomar decisiones en un programa. Por ejemplo:
Si una variable es verdadero ----- Ejecuto unas instrucciones Si no ----- Ejecuto otras instrucciones
Los dos valores que pueden tener las variables boleanas son true o false.
let miBoleana = true
let miBoleana = false
Tipo de datos cadena de caracteres
El último tipo de datos primitivo que existe en Javascript de manera tradicional es el que sirve para guardar un texto, lo que solemos llamar cadena de caracteres o string en inglés.
Javascript sólo tiene un tipo de datos para guardar texto y en el se pueden introducir cualquier número de caracteres. Un texto puede estar compuesto de números, letras y cualquier otro tipo de caracteres y signos. Los textos se escriben entre comillas, dobles o simples.
let miTexto = "Pepe se va a pescar";
miTexto = '23%%$ Letras & *--*';
Todo lo que se coloca entre comillas, como en los ejemplos anteriores, es tratado como una cadena de caracteres independientemente de lo que coloquemos en el interior de las comillas. Por ejemplo, en una variable de texto podemos guardar números y en ese caso tenemos que tener en cuenta que las variables de tipo texto y las numéricas no son la misma cosa y mientras que las de numéricas nos sirven para hacer cálculos matemáticos las de texto no.
Caracteres de escape en cadenas de texto
Ya que hablamos de cadenas de texto queremos explicar qué son los caracteres de escape. Hay una serie de caracteres especiales que sirven para expresar en una cadena de texto determinados controles como puede ser un salto de línea o un tabulador. Estos son los caracteres de escape y se escriben con una notación especial que comienza por una contra barra (una barra inclinada al revés de la normal '\') y luego se coloca el código del carácter a mostrar.
Un carácter muy común es el salto de línea, que se consigue escribiendo \n. Otro carácter muy habitual es colocar unas comillas, pues si colocamos unas comillas sin su carácter especial nos cerrarían las comillas que colocamos para iniciar la cadena de caracteres. Las comillas las tenemos que introducir entonces con \" o \' (comillas dobles o simples). Existen otros caracteres de escape, que veremos en la tabla de abajo más resumidos, aunque también hay que destacar como carácter habitual el que se utiliza para escribir una contrabarra, para no confundirla con el inicio de un carácter de escape, que es la doble contrabarra \\.
Veamos ahora la tabla con todos los caracteres de escape
Salto de línea: \n
Comilla simple: \'
Comilla doble: \"
Tabulador: \t
Retorno de carro: \r
Avance de página: \f
Retroceder espacio: \b
Contrabarra: \\
Algunos de estos caracteres probablemente no los llegarás a utilizar nunca, pues su función es un poco rara y a veces poco clara.
Otros tipos de datos primitivos en Javascript
En Javascript existen otros tipos de datos primitivos, que no son tan importantes como los que hemos visto anteriormente, pero que no podemos dejar de comentar para que esta información esté suficientemente completa.
Son los siguientes:
Undefined
Este es el tipo de datos que tiene Javascript cuando una variable ha sido declarada pero no ha sido inicializada.
Por ejemplo, tenemos esta variable no inicializada:
let noInicializada;
Como no hemos asignado todavía ningún valor a la variable, no tiene un tipo de datos definido. En este caso Javascript asume que tendrá el tipo de datos "undefined".
BigInt
Este es un tipo de datos agregado más recientemente al lenguaje Javascript. Simplemente permite almacenar números mayores en él.
Tienes que tener en cuenta que los números en Javascript o en cualquier otro lenguaje tienen una capacidad, que la define el propio lenguaje o el tipo de hardware sobre el que se ejecuta un programa. Los números enteros en Javascript no son ajenos a estas limitaciones. Permiten números grandes, pero no llegan a todas partes.
El tipo BigInt se creó para ampliar el rango de valores posibles en los tipos enteros soportados tradicionalmente por Javascript. Con BingInt podemos operar con números enormes de manera segura. Para poder definir valores del tipo de datos bigInt tenemos que agregar una "n" al final del valor.
let valorBigInt = 4n;
Como ves, solamente hemos colocado una "n" al final. Aunque el valor es pequeño, esta variable podrá contener si fuera necesario valores gigantescos.
Symbol
Este tipo de datos es bastante raro y no demasiado usado. También es un tipo de datos agregado a Javascript de manera reciente. Su función consiste en permitir tener un valor inmutable y que se garantiza que será diferente a cualquier otro valor que pueda crearse en cualquier otro momento en un programa.
Como puedes deducir, es algo un poco avanzado y, ahora que estamos comenzando con Javascript, nos interesa poquito. Aún así vamos a poner un ejemplo sobre cómo crear un symbol.
let miSymbol = Symbol('hohoho');
Tipos de datos compuestos
Aunque todavía es un poco pronto para dar muchos detalles (llegará el momento en este mismo manual de Javascript), queremos mencionar algunas cosas con respecto a los tipos de datos compuestos.
Estos tipos de datos son aquellos un poco más complejos, que no están compuestos generalmente por un único valor. Es decir, cuando guardamos un número en una variable tenemos un único valor, pero el lenguaje es capaz de guardar en variables valores que tienen distintos datos. Es el caso de los objetos o los arrays.
Objetos
Los objetos son un tema un poco más avanzado y los vamos a tratar más adelante con todo detalle. No obstante te adelantamos que son valores que se colocan entre llaves y donde tenemos distintos elementos. Cada uno de los elementos de un objeto tiene una clave y un valor. Se dice que son compuestos porque en un objeto puedo tener distintas claves con distintos valores. No hay límite, es decir, puedo tener un objeto con una única clave y un único valor y objetos con miles de claves.
Veamos un ejemplo sencillo de objeto en Javascript:
let persona = {
nombre: 'Miguel Angel',
apellidos: 'Alvarez Sanchez',
profesion: 'Informático'
}
Además, si lo consideramos necesario, los valores de algunas claves pueden ser otros objetos, en cualquier nivel de anidación que sea oportuno.
let empresa = {
nombre: 'EscuelaIT',
CIF: 'B12345678',
direccion: {
calle: 'C/ Valencia',
numero: 2,
codigoPostal: '12345'
},
empresaActiva: true
}
Puedes obtener más información en el artículo de Introducción general a los objetos en Javascript.
¿Qué pasa con los Arrays?
También tenemos que hablar sobre una estructura de datos compuesta que existe en todos los lenguajes de programación: los arrays, también llamados arreglos, tablas o vectores. Un ejemplo de array lo tienes a continuación:
let miArray = [1, 2, 3];
Esta estructura de datos nos permite guardar varios elementos en una única variable. Puedes encontrar más información sobre ellos más adelante cuando lleguemos al capítulo de arrays. Lo que queremos decir por ahora es que, aunque parezca raro, los arrays no son un tipo de datos específico de Javascript. En este lenguaje los trata como si fueran objetos.
Tipo null
En Javascript también existe un tipo de datos específico cuando tenemos una referencia a un lugar donde no hay nada. Eso se especifica con el valor null
.
Podríamos discutir sobre si null es o no es un tipo de datos, porque lo cierto es que, cuando le preguntas a Javascript de qué tipo es el valor null
el lenguaje te responde que es un objeto. Por tanto, podríamos decir que null es un tipo de objeto particular que está vacío. Ya hablaremos de él más adelante también.
Funciones
Las funciones son otro de los tipos de datos que maneja Javascript. Las funciones son una de las piezas fundamentales para estructurar el código de las aplicaciones y poder reutilizarlo.
También es un poco pronto para hablar de funciones. Lo veremos más adelante pero si te quieres adelantar te dejamos el enlace al capítulo inicial sobre las funciones en Javascript.
Las funciones en Javascript también se pueden meter en variables. Es un poco raro en algunos lenguajes de programación, pero en Javascript es muy común.
let miFuncion = function() {
// Hacer alguna cosa...
}
Cómo averiguar el tipo de una variable en Javascript
Ya que hablamos de tipos debemos mencionar que en Javascript tenemos un operador que usamos para saber el tipo particular de una variable. Es el operador typeof
. Los operadores los vamos a estudiar en el capítulo siguiente de este manual, pero vamos a ver un ejemplo que nos permitiría saber el tipo de una variable.
let y = 'gol';
alert(typeof y);
Hemos creado una variable y
con el valor de una cadena de caracteres. A continuación hemos mandado a una caja de diálogo alert el valor de su tipo, por lo que Javascript nos mostrará que es un "string".
let num = 444;
alert(typeof num);
En este caso la caja de diálogo nos dirá que el tipo es "number".
Puedes experimentar a usar typeof con diversos tipos de datos de los que hemos hablado en este artículo para practicar por tu cuenta.
Qué son los literales
Por último queremos hablar de una jerga muy común en el mundo de la programación que es la denominación "literal".
Un literal es un valor escrito tal cual en el código de un programa. Al asignar valores en las variables usamos muy frecuentemente literales con aquello que queremos introducir en ellas. Tenemos literales de todos los tipos, por ejemplo literales de cadena, literales numéricos, literales de objeto.
Por ejemplo:
let x = 'literal de cadena';
let y = 902;
let z = { key: 'val' };
let k = [4, 'hola', 5];
En el código anterior tenemos asignaciones en variables de literales de distintos tipos. Por ejemplo 'literal de cadena' es un literal de tipo string. 902 es un literal de tipo number. { key: 'val' } es un literal de tipo object. [4, 'hola', 5] es un literal de array, aunque en Javascript los arrays ya se dijo que eran considerados de tipo object.
El operador typeof lo puedes usar para comprobar el tipo de cualquier literal que quieras, directamente, sin que lo necesites almacenar en una variable.
typeof '1234' // devuelve 'string'
typeof 03 // devuelve 'number'
typeof true // devuelve 'boolean'
typeof [1] // devuelve 'objetct'
typeof undefined // devuelve 'undefined'
Valores de tipo number especiales
Aunque quizás sea un poco pronto para entrar en detalles como lo que vamos a relatar ahora, por ser un poco aburridos, queremos dejar en algún lugar unas notas sobre cosas que también son de tipo number en Javascript.
Dentro de los valores del tipo de datos "number" encontramos algunos especiales que te podrás encontrar en el día a día.
Infinity
El primero de ellos es el valor Infinity
, que como su nombre indica es el equivalente al número o concepto infinito.
Fíjate que Infinity
lleva la primera I en mayúscula. Esto es importante ya que Javascript distingue entre mayúsculas y minúsculas.
El valor Infinity
puede aparecer en Javascript como por ejemplo cuando hacemos una división por cero.
let x = 1 / 0; // El valor de x será Infinity
Si usamos el operador typeof con el valor Infinity
nos dirá que es de tipo "number".
typeof Infinity // devuelve number
NaN
El valor NaN (cuyas letras están compuestas por las iniciales de Not a Number) significa que ese valor no es un número.
Curiosamente, si le preguntamos a Javascript el tipo de NaN nos dirá que es un número.
typeof NaN // devuelve number
El valor NaN se produce en Javascript cuando hacemos una operación en la que el resultado no sea un número. Por ejemplo podemos usar el operador unario "+" que es un operador que solo recibe un dato e intenta convertir ese dato en un número entero.
+"33" // devuelve el número 33
Sin embargo, si lo que le damos es una cadena no numérica, nos devolverá NaN.
+"a" // devuelve NaN
También obtenemos NaN con operaciones matemáticas con tipos de datos numéricos y cadenas no numéricas.
5 / "hola" // devuelve NaN
Sin embargo, tienes que tener cuidado con los tipos porque hay operaciones que a simple vista parece matemáticas pero que no dan este mismo comportamiento.
5 + "hola" // devuelve la cadena "5hola"
Esto último ocurre porque el operador + es el operador de la concatenación entre cadenas de texto. Lo que está haciendo Javascript es considerar la concatenación en lugar de la suma, debido a que uno de los dos operadores es una cadena de texto.
Este trabajo que hace Javascript al realizar operaciones en las que intervienen dos tipos distintos, o realizar operaciones con tipos que realmente no son los adecuados para tales operaciones, es un detalle importante, que a veces trae bastantes quebraderos de cabeza. Si quieres profundizar un poco más a fondo sobre este asunto te recomendamos leer el artículo sobre Coerción de tipos en Javascript.
Conclusión sobre las variables y los tipos de datos
Con esto ya hemos terminado de explicar todo lo que se debe conocer sobre las variables y sus tipos de datos en Javascript. A continuación podemos comenzar con un tema nuevo que será el de operadores en Javascript.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...