En JavaScript, los valores siempre pertenecen a un tipo de dato concreto. Esta tipología indica cómo se representa ese valor y qué operaciones pueden realizarse con él. Por ejemplo, una cadena de texto ("Hola"
) pertenece al tipo String
, mientras que un número (55
) pertenece al tipo Number
.
Existen ocho tipos de datos: los siete que se clasifican como primitivos y los objetos. Los tipos primitivos, como String
, Number
o Boolean
, son valores inmutables, mientras que los objetos son estructuras de datos complejas con propiedades y métodos. Además, en JavaScript las funciones también se consideran valores, ya que en realidad son un tipo especial de objeto.
Una particularidad de JavaScript es que es un lenguaje de tipado dinámico. Esto significa que no es necesario que el desarrollador indique de antemano el tipo de dato de una variable. El motor del lenguaje lo determina de forma automática según el valor asignado o el resultado de una operación.
Por ejemplo, podemos declarar una variable con una cadena de texto y luego almacenar un número en el mismo espacio de memoria. Todo ello sin tener que indicar en ningún momento el tipo de dato almacenado.
let x = "abc"; // Es un string
x = 2; // Ahora es un número
Los tipos de datos son fundamentales en cualquier lenguaje de programación y conocerlos a fondo ayuda a evitar resultados inesperados al trabajar con valores. Por ejemplo, en JavaScript, si sumamos "10" + 10
el resultado será 1010
en lugar de 20
, porque el primer valor es una cadena de texto y se produce una concatenación en vez de una operación matemática.
let sum = "10" + 10; // 1010
En este ejemplo, el motor de JavaScript detecta que el primer operando es una cadena de texto (String
), por lo que convierte el segundo en otra cadena de texto. Entonces realiza una concatenación en vez de una suma aritmética.
Valores primitivos
Los tipos de datos primitivos son inmutables por naturaleza. No hay que confundir la inmutabilidad con la capacidad de reasignación. Una variable puede reasignarse para contener otro valor, pero el valor primitivo en sí no cambia: simplemente se reemplaza por un nuevo valor. En este aspecto, los valores primitivos son totalmente diferentes de los objetos, que sí son mutables.
Desde la versión ECMAScript 6 (ES6 o ES2015) hay siete tipos de datos primitivos: los números enteros y decimales (Number
), números enteros grandes (BigInt
), cadenas de texto (String
), valores lógicos o booleanos, ausencia de valor (Null
), valor no asignado (Undefined
) y valores únicos (Symbol
).
Números
En JavaScript, los números se almacenan como tipo Number
, sin diferenciar los enteros de los decimales. Internamente, este tipo utiliza el formato de punto flotante de 64 bits, definido por el estándar «IEEE 754», lo que permite representar números grandes y con decimales, aunque con ciertas limitaciones de precisión.
Por ejemplo:
let numero1 = 5000; // Entero
let numero2 = 5000.0; // Decimal
Si es necesario trabajar con números enteros muy grandes, JavaScript ofrece el tipo BigInt
, que permite representar enteros de tamaño casi ilimitado y con precisión exacta. Se especifica con el sufijo n
al final del número.
Por ejemplo:
let muylargo = 1234567890123456789012345678901234567890n;
Texto
Una cadena de texto es una secuencia de caracteres que se almacena como tipo String
. Puede contener desde un solo carácter hasta múltiples palabras. Se puede generar mediante tres maneras diferentes: usando las comillas simples (''
), comillas dobles (""
) o acentos graves (``
).
Todos estos ejemplos son válidos:
let web = 'Recursivos';
let web = "Recursivos";
let web = `Recursivos`;
Valores lógicos
Los valores lógicos o booleanos son de tipo Boolean
y solo pueden almacenar dos valores: true
(verdadero) y false
(falso). Este tipo de dato es muy útil en expresiones condicionales, como las que se usan en if
, while
o al evaluar comparaciones. Ayudan mucho a controlar el flujo del programa.
Por ejemplo, el resultado de la comparación 6 > 3
devuelve true
, mientras que 2 === 3
devuelve false
. Pero también podemos almacenar directamente un valor booleano en una variable, de esta manera:
let booleano = true;
Valor ‘undefined’
Cuando se declara una variable en JavaScript que todavía no se ha inicializado —mediante la asignación de un valor— su valor por defecto será undefined
. Sin embargo, si se desea, también se puede asignar el valor undefined
de forma manual, aunque no se recomienda su uso: el motor de JS indica un estado del sistema: que la variable aún no tiene valor.
Por ejemplo:
let sinValor = undefined;
Valor ‘null’
Para indicar la ausencia de valor intencional se puede usar el valor nulo (null
). En este caso, a diferencia del valor indefinido (undefined
) es el desarrollador el que indica de forma explícita el valor null
a una variable. Normalmente se usa para reiniciar o iniciar una referencia sin valor.
Por ejemplo:
let sinValor = null;
Símbolo
El tipo de valor símbolo (Symbol
) permite crear valores primitivos únicos. Se crean mediante el constructor Symbol()
, de modo que se introduce la cadena de texto como parámetro, dentro de sus paréntesis. Dada la unicidad del valor, su uso principal es crear claves de objetos. Permite crear identificadores únicos.
Por ejemplo:
let id = Symbol('identificador');
Objetos
En JavaScript, los objetos son colecciones de pares de datos clave-valor, donde las claves son los nombres de las propiedades y los valores pueden ser cualquier tipo de dato. Se representan con las llaves ({}
). Por ejemplo:
let lenguaje = {
nombre: "JavaScript",
creador: "Brendan Eich"
}
Los arrays son listas ordenadas de elementos fácilmente accesibles mediante un índice numérico, empezando desde 0. Pueden contener elementos de diferentes tipos de datos en la misma colección. Se crean con corchetes ([]
), así:
let lenguajes = ["html", "css", "js"]