Tipos de datos
Tipos de Datos en JavaScript
Definición de Variables y Constantes en JavaScript
Antes de hablar de los tipos de datos, veamos cómo se definen variables y constantes en JavaScript.
1. Variables (var
y let
)
Para definir variables en JavaScript, se utilizan las palabras clave var
o let
. Ambas permiten crear una nueva variable, pero hay una diferencia clave entre ellas:
var
→ Tiene ámbito de función (function scoped).let
→ Tiene ámbito de bloque (block scoped).
En la mayoría de los casos, let
es la opción recomendada porque respeta el alcance del bloque en el que se declara, lo que hace que el código sea más predecible.
let nombre = "Carlos"; // Variable con ámbito de bloquevar edad = 25; // Variable con ámbito de función
2. Constantes (const
)
Para definir una constante, usamos la palabra clave const
. Una vez que se ha asignado un valor a una constante, este no puede ser reasignado.
const PI = 3.1416; // No se puede cambiar su valor
3. Definir Variables Sin var
, let
o const
(¡Evítalo!)
En algunos lenguajes como Python o PHP, es común definir variables sin palabras clave especiales.
En JavaScript, esto también es posible, pero debes evitarlo, porque crea una variable global automáticamente. Esto puede generar problemas en tu código.
x = 10; // ⚠️ No recomendado: Crea una variable global
✅ Mejor usa let
o const
para evitar errores:
let x = 10; // Correctoconst y = 20; // Correcto
Variables sin Tipo Fijo
En JavaScript, las variables no tienen un tipo definido. En su lugar, el tipo depende del valor que almacenan en un momento dado.
Ejemplo:
let x = 5; // x es un númerox = "Hola"; // Ahora x es una cadena (string)
💡 Regla clave: “En JavaScript, las variables no tienen tipos, solo los valores tienen tipos.”
Los 8 Tipos de Datos en JavaScript
JavaScript tiene 8 tipos de datos:
- Number
- String
- Boolean
- Object
- Function
- Undefined
- BigInt
- Symbol
El Operador typeof
JavaScript proporciona el operador typeof
, que permite verificar el tipo de cualquier variable o valor.
Ejemplo:
let x = 42;let y = "Hola";
console.log(typeof x); // "number"console.log(typeof y); // "string"
Este operador es muy útil para depurar código y entender el tipo de dato con el que estamos trabajando.
Números en JavaScript
El primer tipo de dato en JavaScript es el número (Number
). Dependiendo del lenguaje del que vengas, es posible que la forma en que JavaScript maneja los números te parezca más sencilla.
A diferencia de otros lenguajes que diferencian entre enteros y números de punto flotante, en JavaScript todos los números son del mismo tipo (Number
).
Ejemplo:
let x = 5; // Número enterolet pi = 3.1415; // Número decimallet negativo = -10; // Número negativo
Sin embargo, existe un tipo especial para números extremadamente grandes, llamado BigInt, que veremos más adelante.
Formas de Definir Números en JavaScript
Aunque la notación decimal es la más común, JavaScript permite definir números en distintos formatos:
1. Números en Hexadecimal, Binario y Octal
Desde ES6, se pueden definir números en distintas bases:
let hex = 0x1F; // 31 en decimal (Hexadecimal, prefijo "0x")let bin = 0b1010; // 10 en decimal (Binario, prefijo "0b")let oct = 0o7; // 7 en decimal (Octal, prefijo "0o")
2. Notación Científica
Para representar números muy grandes o pequeños, se puede usar notación científica:
let grande = 6e7; // 6 * 10^7 = 60000000let pequeño = 4e-3; // 4 * 10^-3 = 0.004
Valores Especiales: NaN
e Infinity
Existen dos valores especiales en JavaScript relacionados con los números:
1. NaN
(Not a Number)
Si intentamos hacer operaciones matemáticas con valores no numéricos, obtenemos NaN
:
let resultado = 10 * "Hola"; // NaNconsole.log(resultado); // Output: NaN
💡 NaN
es un valor especial que indica un error en una operación matemática. No genera un error en la ejecución, pero significa que algo no salió bien.
2. Infinity
y -Infinity
Si realizamos una operación que produce un número demasiado grande o intentamos dividir entre cero, obtenemos Infinity
:
console.log(1 / 0); // Infinityconsole.log(-1 / 0); // -Infinityconsole.log(10 ** 999); // Infinity
⚠️ Tanto NaN
como Infinity
son considerados números en JavaScript:
console.log(typeof NaN); // "number"console.log(typeof Infinity); // "number"
Operaciones Matemáticas en JavaScript
JavaScript permite realizar las operaciones matemáticas básicas:
let suma = 5 + 3; // 8let resta = 10 - 4; // 6let multiplicacion = 6 * 3; // 18let division = 10 / 2; // 5let modulo = 10 % 3; // 1 (resto de la división)let exponente = 2 ** 3; // 8 (2^3)
Además, JavaScript ofrece el objeto Math
, que contiene muchas funciones útiles:
console.log(Math.sqrt(16)); // 4 (raíz cuadrada)console.log(Math.abs(-10)); // 10 (valor absoluto)console.log(Math.max(5, 10, 15)); // 15 (mayor valor)console.log(Math.min(5, 10, 15)); // 5 (menor valor)console.log(Math.round(4.6)); // 5 (redondeo)console.log(Math.floor(4.9)); // 4 (redondeo hacia abajo)console.log(Math.ceil(4.1)); // 5 (redondeo hacia arriba)console.log(Math.sin(Math.PI / 2)); // 1 (seno de 90°)
Precisión de los Números en JavaScript
1. Todos los Números son de 64 Bits
En JavaScript, todos los números se almacenan como valores de coma flotante de 64 bits según el estándar IEEE 754.
Esto significa que los números grandes pierden precisión después de 15-16 dígitos:
let num = 9999999999999999; // 16 dígitosconsole.log(num); // 10000000000000000 (redondeado)
2. Errores con Decimales
Los números de punto flotante pueden generar errores inesperados:
console.log(0.1 + 0.2); // 0.30000000000000004console.log(0.3 === 0.1 + 0.2); // false
💡 Solución: Multiplicar por 10 y redondear:
let resultado = Math.round((0.1 + 0.2) * 100) / 100;console.log(resultado); // 0.3
Resumen numbers
- JavaScript no distingue entre enteros y flotantes; todos son del tipo
Number
. - Soporta diferentes bases numéricas como decimal, hexadecimal, binario y octal.
- Existen valores especiales:
NaN
(resultado inválido) eInfinity
(valor fuera de los límites). - El objeto
Math
proporciona funciones matemáticas avanzadas. - Los números grandes pierden precisión y los decimales pueden dar errores de cálculo.
Cadenas de Texto (Strings) en JavaScript
Ahora que hemos visto lo fundamental sobre los números en JavaScript, pasemos al siguiente tipo de dato: las cadenas de texto (Strings).
Las cadenas en JavaScript son similares a las de otros lenguajes: simplemente representan una serie de caracteres.
Cómo Definir Cadenas en JavaScript
En JavaScript, una cadena se puede definir utilizando tres tipos de comillas:
1. Comillas Simples y Dobles
let mensaje1 = 'Hola, mundo'; // Comillas simpleslet mensaje2 = "Hola, mundo"; // Comillas dobles
Ambas opciones son válidas y no hay diferencia funcional. Lo importante es ser consistente en todo el código.
2. Template Literals (Backticks - ` )
Desde ES6, se pueden usar backticks (`) para definir cadenas.
let nombre = "Ana";let saludo = `Hola, ${nombre}!`; // Interpolación de variablesconsole.log(saludo); // Output: Hola, Ana!
💡 Ventaja de los backticks: Permiten interpolación de variables (introducir una variable dentro de un string) y pueden contener saltos de línea sin necesidad de caracteres especiales.
Propiedades y Métodos de Strings
Las cadenas en JavaScript tienen varias propiedades y métodos útiles.
1. Propiedad length
(Longitud de la Cadena)
let texto = "JavaScript";console.log(texto.length); // Output: 10
2. Obtener un Carácter con charAt()
console.log(texto.charAt(3)); // Output: a
3. Convertir a Mayúsculas y Minúsculas
console.log(texto.toUpperCase()); // "JAVASCRIPT"console.log(texto.toLowerCase()); // "javascript"
4. Otras Funciones Útiles
console.log(texto.includes("Script")); // true (verifica si contiene "Script")console.log(texto.startsWith("Java")); // true (verifica si empieza con "Java")console.log(texto.endsWith("Java")); // false (verifica si termina con "Java")
Uso de Caracteres Especiales en Strings
Algunas veces necesitamos incluir caracteres especiales en una cadena, como comillas o saltos de línea.
1. Uso del Carácter de Escape (\
)
Si queremos usar comillas dentro de una cadena definida con las mismas comillas, necesitamos un carácter de escape (\
):
let frase = "Ella dijo: \"JavaScript es genial!\"";console.log(frase);
2. Alternativa: Usar Diferentes Tipos de Comillas
let frase2 = 'Ella dijo: "JavaScript es genial!"';console.log(frase2);
3. Caracteres Especiales Comunes
Secuencia | Significado |
---|---|
\n | Nueva línea |
\t | Tabulación |
\\ | Barra invertida (\ ) |
Ejemplo:
let mensaje = "Línea 1\nLínea 2";console.log(mensaje);
Output:
Línea 1Línea 2
Concatenación de Cadenas
1. Usando el Operador +
let saludo = "Hola" + " " + "mundo!";console.log(saludo); // Output: Hola mundo!
2. Usando el Método .concat()
let parte1 = "Hola";let parte2 = "mundo!";console.log(parte1.concat(" ", parte2)); // Output: Hola mundo!
Precauciones al Concatenar Strings con Números
En JavaScript, puedes concatenar cadenas y números sin necesidad de conversión previa:
let edad = 25;console.log("Tengo " + edad + " años."); // Output: Tengo 25 años.
Sin embargo, el orden de las operaciones importa:
let x = 5;let y = 8;console.log("x + y es " + x + y); // Output: "x + y es 58"
💡 ¿Por qué sucede esto? JavaScript evalúa las expresiones de izquierda a derecha.
- Primero concatena
"x + y es "
conx
→"x + y es 5"
. - Luego concatena con
y
→"x + y es 58"
.
✅ Solución: Usar paréntesis para forzar la operación matemática primero:
console.log("x + y es " + (x + y)); // Output: "x + y es 13"
Resumen Strings
- JavaScript permite definir cadenas con comillas simples, dobles o backticks (`).
- Se pueden concatenar con
+
o.concat()
. - Usa
\
para caracteres especiales como\"
,\'
,\n
. -Ten cuidado al concatenar cadenas con números, ya que el orden afecta el resultado.
Valores Booleanos en JavaScript
El tercer tipo de dato en JavaScript es el Booleano (Boolean
). Al igual que en la mayoría de los lenguajes de programación, un booleano solo tiene dos valores posibles:
true
(verdadero)false
(falso)
Estos valores pueden ser asignados directamente o generados como resultado de una comparación lógica.
let esMayor = true; // Asignación directalet resultado = 5 > 3; // Comparación (true)
Uso de Booleanos en la Lógica de Programación
Los valores booleanos son esenciales para controlar el flujo de ejecución en un programa, especialmente con estructuras de control como:
if
while
- Operador ternario (
condition ? trueValue : falseValue
)
Ejemplo con if
:
let edad = 18;if (edad >= 18) { console.log("Eres mayor de edad");} else { console.log("Eres menor de edad");}
Ejemplo con while
:
let contador = 0;while (contador < 3) { console.log("Contador:", contador); contador++;}
Ejemplo con operador ternario (condition ? trueValue : falseValue
):
let mensaje = edad >= 18 ? "Adulto" : "Menor";console.log(mensaje); // "Adulto"
Valores “Truthy” y “Falsy” en JavaScript
Aunque solo existen los valores true
y false
, JavaScript permite convertir otros valores a booleanos.
Existen valores que se consideran “truthy” (se interpretan como true
) y otros que son “falsy” (se interpretan como false
).
Valores “Falsy” (equivalentes a false ) |
---|
"" (cadena vacía) |
0 (número cero) |
NaN (Not a Number) |
0n (BigInt con valor cero) |
null |
undefined |
false |
Cualquier otro valor en JavaScript es considerado “truthy” y se evalúa como true
.
Ejemplo con if
y un valor “falsy”:
if ("") { console.log("Esto no se ejecuta");} else { console.log("Esto sí se ejecuta"); // Se ejecuta porque "" es falsy}
Ejemplo con un valor “truthy”:
if ("Hola") { console.log("Esto se ejecuta"); // Se ejecuta porque "Hola" es truthy}
Conversión de Valores a Booleanos
Para verificar cómo un valor se evalúa en términos booleanos, podemos usar la función Boolean()
o el operador !!
.
console.log(Boolean("Hola")); // true (truthy)console.log(Boolean("")); // false (falsy)console.log(Boolean(123)); // true (truthy)console.log(Boolean(0)); // false (falsy)console.log(Boolean(null)); // false (falsy)console.log(Boolean(undefined)); // false (falsy)
Otra forma rápida de convertir a booleano es con !!
(doble negación lógica):
console.log(!!"Hola"); // trueconsole.log(!!0); // false
Resumen Booleans
- JavaScript solo tiene dos valores booleanos:
true
yfalse
. - Las estructuras de control (
if
,while
, operadores ternarios) dependen de booleanos. - Algunos valores se evalúan como “truthy” (equivalentes a
true
) y otros como “falsy” (false
). - Puedes convertir cualquier valor a booleano con
Boolean(valor)
o!!valor
.
Objetos en JavaScrip5
Definición de Objetos
Un objeto en JavaScript es una colección de pares clave-valor. Cada clave (o propiedad) está asociada a un valor que puede ser de cualquier tipo de dato en JavaScript, incluyendo números, cadenas, booleanos, funciones e incluso otros objetos.
Ejemplo de Objeto
let persona = { nombre: "Carlos", edad: 30, colorOjos: "marrón"};
Los objetos en JavaScript son esenciales para organizar y estructurar datos.
Si alguna vez has trabajado con JSON (JavaScript Object Notation), entonces ya has interactuado con objetos de JavaScript.
Acceder a Propiedades de un Objeto
Existen dos formas principales de acceder a las propiedades de un objeto:
1. Notación de punto (.
)
console.log(persona.nombre); // Output: "Carlos"console.log(persona.edad); // Output: 30console.log(persona.colorOjos); // Output: marrón
2. Notación de corchetes ([]
)
console.log(persona["nombre"]); // Output: "Carlos"console.log(persona["edad"]); // Output: 30console.log(persona["colorOjos"]); // OUtput: marron
Modificar Propiedades de un Objeto
Podemos cambiar los valores de un objeto después de haberlo definido:
persona.edad = 31;persona["colorOjos"] = "verde";
console.log(persona.edad); // Output: 31console.log(persona.colorOjos); // Output: "verde"
También podemos agregar nuevas propiedades dinámicamente:
persona.altura = 1.75;console.log(persona.altura); // Output: 1.75
O eliminar propiedades usando delete
:
delete persona.colorOjos;console.log(persona.colorOjos); // Output: undefined
Objetos Anidados y Arrays Dentro de Objetos
Los valores de un objeto pueden ser otros objetos o arrays:
let usuario = { nombre: "Ana", direccion: { calle: "Av. Principal", ciudad: "Madrid" }, hobbies: ["leer", "correr", "viajar"]};
console.log(usuario.direccion.calle); // Output: "Av. Principal"console.log(usuario.hobbies[0]); // Output: "leer"
Pasar Objetos a Funciones
Cuando pasamos un objeto a una función, se pasa por referencia, por lo que cualquier modificación dentro de la función afectará al objeto original:
function cambiarEdad(persona) { persona.edad = 40;}
let usuario1 = { edad: 25 };cambiarEdad(usuario1);
console.log(usuario1.edad); // Output: 40
Si queremos evitar esto, podemos pasar una copia del objeto en su lugar:
function cambiarEdadSeguro(persona) { let copia = { ...persona }; copia.edad = 40; return copia;}
let usuario2 = { edad: 25 };let nuevoUsuario = cambiarEdadSeguro(usuario2);
console.log(usuario2.edad); // Output: 25console.log(nuevoUsuario.edad); // Output: 40
Sintaxis Reducida para Crear Objetos
Cuando una propiedad tiene el mismo nombre que una variable, podemos simplificar la sintaxis:
let nombre = "Carlos";let edad = 30;
// En lugar de:let persona4 = { nombre: nombre, edad: edad };
// Podemos escribir directamente:let persona5 = { nombre, edad };
Propiedades con Caracteres Especiales
Si una clave tiene caracteres especiales o espacios, debe ir entre comillas:
let empleado2 = { "job-title": "Diseñador UX" };console.log(empleado2["job-title"]); // Output: "Diseñador UX"
En estos casos, debemos usar la notación de corchetes ([]
) para acceder a la propiedad, ya que empleado2.job-title
generaría un error.
El Valor null
y los Objetos
JavaScript tiene un valor especial llamado null
, que se usa para indicar ausencia de datos:
let persona6 = null;console.log(persona6); // Output: null
Sin embargo, hay una peculiaridad en JavaScript:
console.log(typeof null); // Output: "object" (esto es un error histórico en JS)
Aunque null
no es un objeto, JavaScript lo clasifica como tal por razones técnicas.
Resumen Objetos
- Los objetos en JavaScript son colecciones de pares clave-valor.
- Se pueden acceder, modificar y eliminar propiedades con
.
o[]
. - Los objetos se asignan por referencia, lo que significa que modificar uno puede afectar a otros.
- Se pueden anidar objetos y almacenar arrays dentro de objetos.
- Podemos usar sintaxis reducida (
{ nombre, edad }
) cuando las claves y variables tienen el mismo nombre. - Propiedades con caracteres especiales requieren comillas y deben accederse con
[]
. null
se usa para indicar ausencia de datos, aunquetypeof null
retorna"object"
por un error histórico en JavaScript.
Arrays en JavaScript
¿Qué es un array?
En JavaScript, un array es una colección ordenada de valores, definida normalmente usando corchetes:
let frutas = ["manzana", "banana", "naranja"];
Características:
- Puede contener cualquier tipo de dato: números, strings, objetos, booleanos, incluso otros arrays.
- No es necesario que todos los elementos sean del mismo tipo, a diferencia de lenguajes con tipado estático.
let mezcla = [ 42, "texto", true, { nombre: "Ana" }, [1, 2] ];
¿Por qué los arrays no están en la lista de tipos básicos?
Técnicamente, los arrays no son un tipo de dato independiente en JavaScript, sino una forma especializada del tipo object
.
Esto se puede verificar con el operador typeof
:
let frutas = ["manzana", "banana"];console.log(typeof frutas); // "object"
💡 Aunque esto suele ser solo un detalle técnico, conviene tenerlo presente para evitar confusiones puntuales.
Acceder y modificar elementos
Los elementos de un array se acceden por su índice, que empieza en 0:
console.log(frutas[0]); // "manzana"
Se pueden modificar fácilmente:
frutas[1] = "pera";console.log(frutas); // ["manzana", "pera", "naranja"]
Propiedad .length
Todos los arrays tienen una propiedad .length
que indica cuántos elementos contiene:
console.log(frutas.length); // 3
Métodos comunes de los arrays
JavaScript incluye muchos métodos incorporados para trabajar con arrays. Algunos de los más usados son:
Método | Descripción |
---|---|
.push() | Añade un elemento al final |
.pop() | Elimina y retorna el último elemento |
.indexOf() | Retorna el índice de un elemento (o -1 si no existe) |
.map() | Crea un nuevo array aplicando una función a cada elemento |
.filter() | Crea un nuevo array con los elementos que cumplen una condición |
.sort() | Ordena los elementos del array |
¿Usar coma final (trailing comma
) en arrays y objetos?
Las comas finales (también llamadas trailing commas) pueden ser útiles al añadir nuevos elementos, parámetros o propiedades en código JavaScript.
let frutas = [ "manzana", "pera", "naranja", // ← coma final];
Si deseas agregar una nueva propiedad, puedes simplemente añadir una nueva línea sin tener que modificar la última línea anterior, siempre que esa línea ya tenga una coma final. Esto hace que las diferencias en el control de versiones (diffs) sean más limpias y que editar el código sea menos problemático.
JavaScript permite comas finales en literales de arrays desde sus inicios. Actualmente, también se permiten en:
- Literales de objetos,
- Parámetros de funciones,
- Importaciones con nombre (
named imports
), - Exportaciones con nombre (
named exports
), y más. ⚠️ Sin embargo, JSON no permite comas finales bajo ninguna circunstancia.
Resumen arrays
- Los arrays son colecciones ordenadas de elementos.
- Pueden contener cualquier tipo de dato y elementos de tipos mezclados.
- Aunque son técnicamente objetos, su comportamiento es muy específico.
- Disponen de métodos potentes para manipulación avanzada de datos.
- Usar comas finales es opcional, pero recomendable para evitar errores de sintaxis.
Funciones en JavaScript
¿Qué es una función?
Una función en JavaScript es un bloque reutilizable de código que puede:
- Recibir argumentos (parámetros)
- Devolver un valor (opcional)
function saludar(nombre) { return "Hola, " + nombre;}
Una función puede no recibir parámetros, o no devolver nada, dependiendo del caso de uso.
¿Diferencias con otros lenguajes?
A diferencia de lenguajes como Java, en JavaScript las funciones no necesitan pertenecer a una clase u objeto. Pueden definirse de forma independiente:
function sumar(a, b) { return a + b;}
add(2, 3); // Output: 5
Formas de definir funciones
JavaScript permite múltiples formas de definir funciones:
1. Declaración de función
function sumar(x, y) { return x + y;}
Estas funciones son “hoisting-friendly”
2. Otro modo de declarar una función
let suma = function(x, y) { return x + y;};
Estas no se pueden usar antes de ser declaradas.
3. Arrow functions (Funciones flecha)
Introducidas en ES6, son una forma más corta de escribir funciones:
let suma = (a, b) => a + b;
También pueden tener cuerpo con {}
y usar return
:
let suma = (a, b) => { return a + b;};
Llamar a una función
Para ejecutar una función, simplemente se escribe su nombre seguido de paréntesis:
sumar(2, 3); // Llama a la función 'sumar' con los argumentos 2 y 3
Si la función no necesita argumentos:
saludar(); // Llama a la función sin argumentos
Resumen de funciones
- Las funciones son bloques reutilizables de código.
- Pueden definirse con
function
, como expresiones (let f = function()
) o con arrow functions (=>
). - Solo las funciones definidas con
function
son “hoisted”. - Se llaman usando
nombreFuncion()
con o sin argumentos. - Las funciones pueden o no devolver un valor (
return
es opcional).
Tipo de dato undefined
en JavaScript
El tipo de dato undefined
es algo peculiar y único en JavaScript. Lo encontrarás en varios contextos, pero casi siempre significa que:
- Una variable no existe, o
- Ha sido declarada pero aún no se le ha asignado un valor.
Ejemplos comunes
let x;console.log(x); // undefined (declarada pero no asignada)
console.log(typeof noExiste); // "undefined" (la variable no existe)
let persona = {};console.log(persona.edad); // undefined (la propiedad no existe)
let frutas = ["manzana"];console.log(frutas[3]); // undefined (índice fuera de rango)
function saludar() { console.log("Hola");}console.log(saludar()); // undefined (no tiene return)
¿Cuál es la diferencia entre undefined
y null
?
Es una pregunta común al aprender JavaScript. Aquí tienes una tabla comparativa clara:
Característica | undefined | null |
---|---|---|
¿Qué significa? | Variable no declarada o no inicializada | Valor intencionalmente vacío o desconocido |
¿Lo asigna el programador? | ❌ No siempre (JS lo asigna automáticamente) | ✅ Sí, se asigna explícitamente |
Tipo (typeof ) | "undefined" | "object" (❗ detalle técnico confuso en JS) |
Usos comunes | Variable sin valor asignado, acceso inexistente | Ausencia de valor conocida (ej: edad no proporcionada) |
Ejemplo para entender null
let edadUsuario = null;// Sabemos que la edad existe, pero no ha sido proporcionada aún
Ejemplo de uso de undefined
automáticamente
let nombre;console.log(nombre); // undefined
Consideraciones importantes
undefined
es el valor por defecto de una variable declarada pero no inicializada.null
se usa cuando queremos decir explícitamente que un valor está ausente.- Aunque ambos representan “falta de valor”, su uso y comportamiento es distinto.
- En funciones con valores por defecto, pasar
undefined
usará el valor por defecto, mientras que pasarnull
no lo hará.
function saludar(nombre = "Invitado") { console.log("Hola, " + nombre);}
saludar(undefined); // Hola, Invitado ✅saludar(null); // Hola, null ❌
Resumen undefined
undefined
= variable vacía sin valor asignado aún.null
= valor intencionalmente vacío.- Ambos tienen usos distintos y son fundamentales en JavaScript.
- Conocer sus diferencias mejora tu comprensión del flujo de datos y validación en tu código.
BigInt en JavaScript
Hasta ahora hemos hablado de:
- Números (
Number
) - Cadenas (
String
) - Booleanos (
Boolean
) - Objetos (incluidos Arrays,
null
, funciones yundefined
)
Ahora es momento de conocer un tipo de dato menos común pero muy útil: BigInt
¿Qué es BigInt
?
BigInt
es un tipo de dato que permite trabajar con números enteros extremadamente grandes, sin perder precisión.
Fue introducido porque el tipo Number
en JavaScript tiene límites de precisión:
- A partir de 15-16 dígitos, los números pueden dejar de ser precisos.
¿Cómo se declara un BigInt
?
Simplemente añadiendo una n
al final del número:
const numeroGrande = 9007199254740991n; // Esto es un BigInt
También puedes usar el constructor:
const otroBigInt = BigInt("123456789012345678901234567890");
¿Qué puedes hacer con BigInt
?
Puedes realizar operaciones matemáticas básicas:
const a = 1000n;const b = 2000n;
console.log(a + b); // 3000nconsole.log(b - a); // 1000nconsole.log(a * b); // 2000000nconsole.log(b / a); // 2n (¡sin decimales!)
Cosas a tener en cuenta
1. No puedes mezclar Number
y BigInt
directamente
const a = 10n;const b = 2;
console.log(a + b); // ❌ Error: No puedes mezclar bigInt con otros tipos de datos.
Solución:
console.log(a + BigInt(b)); // ✅ 12n
2. No hay decimales
Cualquier operación que debería devolver un decimal, se redondea hacia abajo:
console.log(10n / 3n); // 3nconsole.log(5n / 2n); // 2n
3. Puedes usarlo con otros formatos numéricos
const bigBinary = 0b1010n; // binarioconst bigHex = 0x1ffn; // hexadecimalconst bigOctal = 0o777n; // octal
¿Cuándo usar BigInt
?
Aunque no es común en aplicaciones del día a día, es muy útil en casos donde la precisión en grandes enteros es esencial, como:
- Criptografía
- Cálculos científicos
- Finanzas de alta precisión
- Manipulación de IDs grandes (como en bases de datos)
Resumen BigInt
Característica | BigInt |
---|---|
Precisión para números grandes | ✅ Sí, sin límites prácticos |
Mezcla con Number | ❌ No, debe hacerse conversión manual |
Decimales | ❌ No, los trunca |
Declaración | 123n o BigInt("123") |
Uso típico | Criptografía, datos financieros |
Symbol en JavaScript
El último tipo de dato que veremos en este curso es Symbol
.
Es probablemente uno de los menos intuitivos de todos los tipos primitivos en JavaScript, pero puede ser muy útil en ciertos casos avanzados.
¿Qué es un Symbol
?
Un Symbol
es un valor único e inmutable. Su propósito principal es crear identificadores únicos que no se pueden duplicar accidentalmente, incluso si usan la misma descripción.
¿Cómo se crea un símbolo?
Usando el constructor Symbol()
:
const id = Symbol("descripcion opcional");
- La cadena que pasamos es una descripción (solo para depuración).
- Podemos omitirla si queremos.
Importante:
- Incluso si dos símbolos tienen la misma descripción, no son iguales.
const a = Symbol("clave");const b = Symbol("clave");
console.log(a === b); // ❌ false
La única forma de que dos símbolos sean iguales es que sean exactamente la misma referencia.
Símbolos globales: Symbol.for()
Existe otra forma de crear símbolos: registrarlos globalmente mediante Symbol.for()
:
const s1 = Symbol.for("usuarioID");const s2 = Symbol.for("usuarioID");
console.log(s1 === s2); // ✅ true
En este caso, se accede a la misma entrada dentro de un registro global. Esto permite reutilizar símbolos entre distintas partes de la aplicación.
¿Para qué sirven los símbolos?
Uno de sus usos más útiles es evitar conflictos de nombres cuando agregamos propiedades a objetos.
⚠️ Problema clásico:
const camisa = { talla: "M"};
camisa.talla = 11; // ❗ Esto sobrescribe el valor original
✅ Solución con Symbol
:
const TALLA_OCULTA = Symbol("tallaInterna");
camisa[TALLA_OCULTA] = 11; // No interfiere con 'camisa.talla'
Así evitamos colisiones de propiedades, ya que Symbol
garantiza que la clave sea única.
¿Cuándo usar Symbol
?
- Cuando quieres garantizar unicidad.
- Para crear propiedades ocultas o privadas en objetos.
- En librerías o APIs para evitar conflictos de nombres.
Recuerda esto:
- Los
Symbol
existen para cuando necesitas claves únicas dentro de tu código.
Resumen Symbol
Característica | Symbol |
---|---|
Tipo de dato | Primitivo |
Propósito | Claves únicas |
Descripción opcional | ✅ Solo para depuración |
Comparación | Symbol("a") !== Symbol("a") |
Reutilización global | ✅ con Symbol.for() |
Uso común | Propiedades ocultas/seguras |
Avanzado | Sí, poco común en código básico |