Volver al inicio
Fundamentos de JavaScript

Variables, Tipos de Datos y Operadores

Aprende los fundamentos esenciales de JavaScript: cómo almacenar información, qué tipos de datos existen y cómo manipularlos con operadores.

1. Variables

Las variables son contenedores que nos permiten almacenar valores para usarlos posteriormente. En JavaScript moderno hay tres formas de declarar variables:

let - Variable reasignable

Usa let cuando necesites cambiar el valor de la variable.

Ejemplo de letjavascript
1// Declarar e inicializar
2let nombre = "Carlos";
3console.log(nombre); // "Carlos"
4
5// Reasignar un nuevo valor
6nombre = "María";
7console.log(nombre); // "María"
8
9// Declarar sin valor inicial
10let edad;
11edad = 25;
12console.log(edad); // 25

const - Constante (no reasignable)

Usa const cuando el valor NO deba cambiar.

Ejemplo de constjavascript
1// Debe inicializarse al declararla
2const PI = 3.14159;
3console.log(PI); // 3.14159
4
5// ❌ Esto daría error:
6// PI = 3.14; // Error: Assignment to constant variable
7
8const nombre = "Ana";
9const mayorDeEdad = true;
10
11// ⚠️ Importante: const NO hace inmutables los objetos
12const persona = { nombre: "Juan" };
13persona.nombre = "Pedro"; // ✅ Esto SÍ funciona
14persona.edad = 30; // ✅ Esto también
15console.log(persona); // { nombre: "Pedro", edad: 30 }

var - Forma antigua (evitar)

La forma antigua de declarar variables. No se recomienda usar en código moderno.

var vs letjavascript
1// ❌ Evita usar var en código nuevo
2var antiguaVariable = "valor";
3
4// ✅ Mejor usa let o const
5let modernoVariable = "valor";

💡 Buena práctica

Por defecto usa const. Solo cambia a let si necesitas reasignar el valor.

2. Tipos de Datos Primitivos

String (Cadenas de texto)

Stringsjavascript
1// Puedes usar comillas simples, dobles o backticks
2const nombre = "Juan";
3const apellido = 'García';
4
5// Template literals (backticks) - permiten interpolación
6const saludo = `Hola, ${nombre} ${apellido}`;
7console.log(saludo); // "Hola, Juan García"
8
9// Saltos de línea y multilínea
10const mensaje = `
11 Este es un mensaje
12 en varias líneas
13`;
14
15// Métodos comunes
16console.log(nombre.length); // 4
17console.log(nombre.toUpperCase()); // "JUAN"
18console.log(nombre.toLowerCase()); // "juan"
19console.log(apellido.includes("arc")); // true

Number (Números)

Numbersjavascript
1// Enteros y decimales
2const entero = 42;
3const decimal = 3.14159;
4const negativo = -273;
5
6// Operaciones matemáticas básicas
7const suma = 10 + 5; // 15
8const resta = 10 - 5; // 5
9const multiplicacion = 10 * 5; // 50
10const division = 10 / 5; // 2
11const modulo = 10 % 3; // 1 (resto de la división)
12
13// Valores especiales
14const infinito = Infinity;
15const noEsNumero = NaN; // Not a Number
16
17// Conversión de strings a números
18const numero = Number("123"); // 123
19const enteroParseado = parseInt("42px"); // 42
20const decimalParseado = parseFloat("3.14"); // 3.14

Boolean (Booleanos)

Booleansjavascript
1// Solo dos valores posibles: true o false
2const esMayorDeEdad = true;
3const tieneLicencia = false;
4
5// Comparaciones devuelven booleanos
6const esIgual = 5 === 5; // true
7const esDiferente = 5 !== 3; // true
8const esMayor = 10 > 5; // true
9const esMenor = 3 < 2; // false
10const esMayorOIgual = 5 >= 5; // true
11
12// Valores "truthy" y "falsy"
13// Falsy: false, 0, "", null, undefined, NaN
14// Todo lo demás es "truthy"
15
16console.log(Boolean(0)); // false
17console.log(Boolean("")); // false
18console.log(Boolean("hola")); // true
19console.log(Boolean(42)); // true

null y undefined

null vs undefinedjavascript
1// undefined - variable declarada pero sin valor asignado
2let variable;
3console.log(variable); // undefined
4
5// null - ausencia intencional de valor
6const sinValor = null;
7console.log(sinValor); // null
8
9// Diferencia
10console.log(typeof undefined); // "undefined"
11console.log(typeof null); // "object" (bug histórico de JS)

Verificar tipo de dato

typeofjavascript
1// Operador typeof
2console.log(typeof "Hola"); // "string"
3console.log(typeof 42); // "number"
4console.log(typeof true); // "boolean"
5console.log(typeof undefined); // "undefined"
6console.log(typeof null); // "object"
7console.log(typeof {}); // "object"
8console.log(typeof []); // "object"
9console.log(typeof function(){}); // "function"

3. Operadores

Operadores Aritméticos

Operadores Aritméticosjavascript
1let a = 10;
2let b = 3;
3
4console.log(a + b); // 13 - Suma
5console.log(a - b); // 7 - Resta
6console.log(a * b); // 30 - Multiplicación
7console.log(a / b); // 3.333... - División
8console.log(a % b); // 1 - Módulo (resto)
9console.log(a ** b); // 1000 - Exponenciación (10³)
10
11// Incremento y decremento
12let contador = 0;
13contador++; // Incrementa en 1 (ahora es 1)
14contador--; // Decrementa en 1 (ahora es 0)
15
16// Pre y post incremento
17let x = 5;
18console.log(x++); // 5 (devuelve y luego incrementa)
19console.log(x); // 6
20
21let y = 5;
22console.log(++y); // 6 (incrementa y luego devuelve)
23console.log(y); // 6

Operadores de Asignación

Asignación Compuestajavascript
1let num = 10;
2
3// Asignación compuesta
4num += 5; // num = num + 5; → 15
5num -= 3; // num = num - 3; → 12
6num *= 2; // num = num * 2; → 24
7num /= 4; // num = num / 4; → 6
8num %= 4; // num = num % 4; → 2
9num **= 3; // num = num ** 3; → 8
10
11console.log(num); // 8

Operadores de Comparación

Comparaciónjavascript
1// Igualdad estricta (compara valor Y tipo)
2console.log(5 === 5); // true
3console.log(5 === "5"); // false (número vs string)
4
5// Igualdad débil (compara solo valor, convierte tipos)
6console.log(5 == "5"); // true ⚠️ Evita usar ==
7
8// Desigualdad
9console.log(5 !== 3); // true
10console.log(5 != "5"); // false
11
12// Comparaciones
13console.log(10 > 5); // true
14console.log(10 < 5); // false
15console.log(10 >= 10); // true
16console.log(5 <= 3); // false

⚠️ Importante

Siempre usa === y !== en lugar de == y !=

Operadores Lógicos

Operadores Lógicosjavascript
1// AND (&&) - Ambas condiciones deben ser verdaderas
2const edad = 20;
3const tieneLicencia = true;
4
5console.log(edad >= 18 && tieneLicencia); // true
6
7// OR (||) - Al menos una condición debe ser verdadera
8const esFinde = false;
9const esVacaciones = true;
10
11console.log(esFinde || esVacaciones); // true
12
13// NOT (!) - Niega el valor
14const esDeDia = true;
15console.log(!esDeDia); // false
16
17// Combinaciones
18const temperatura = 25;
19const esSoleado = true;
20
21const buenDiaParaPlaya = temperatura > 20 && esSoleado;
22console.log(buenDiaParaPlaya); // true
23
24// Operador nullish coalescing (??)
25const nombre = null;
26const nombrePorDefecto = nombre ?? "Anónimo";
27console.log(nombrePorDefecto); // "Anónimo"

Operador Ternario

Operador Ternariojavascript
1// Sintaxis: condición ? valorSiTrue : valorSiFalse
2const edad = 18;
3const mensaje = edad >= 18 ? "Eres mayor de edad" : "Eres menor de edad";
4console.log(mensaje); // "Eres mayor de edad"
5
6// Equivalente a:
7let mensajeLargo;
8if (edad >= 18) {
9 mensajeLargo = "Eres mayor de edad";
10} else {
11 mensajeLargo = "Eres menor de edad";
12}
13
14// Otro ejemplo
15const precio = 100;
16const descuento = precio > 50 ? 10 : 5;
17console.log(descuento); // 10
18
19// Ternarios anidados (usar con moderación)
20const nota = 75;
21const resultado = nota >= 90 ? "Excelente"
22 : nota >= 70 ? "Bien"
23 : nota >= 50 ? "Aprobado"
24 : "Reprobado";
25console.log(resultado); // "Bien"

4. Métodos útiles para Strings

Estos métodos te serán útiles para manipular cadenas de texto en los ejercicios:

Métodos de Stringjavascript
1const texto = "Hola Mundo";
2
3// .length - Obtener longitud
4console.log(texto.length); // 10
5
6// .slice(inicio, fin) - Extraer una parte del string
7console.log(texto.slice(0, 4)); // "Hola"
8console.log(texto.slice(5)); // "Mundo"
9console.log(texto.slice(-5)); // "Mundo" (desde el final)
10
11// .substring(inicio, fin) - Similar a slice
12console.log(texto.substring(0, 4)); // "Hola"
13
14// .charAt(índice) - Obtener carácter en posición
15console.log(texto.charAt(0)); // "H"
16console.log(texto.charAt(5)); // "M"
17
18// Acceso directo con []
19console.log(texto[0]); // "H"
20console.log(texto[texto.length - 1]); // "o" (último carácter)
21
22// .toUpperCase() y .toLowerCase()
23console.log(texto.toUpperCase()); // "HOLA MUNDO"
24console.log(texto.toLowerCase()); // "hola mundo"
25
26// .trim() - Eliminar espacios al inicio y final
27const conEspacios = " hola ";
28console.log(conEspacios.trim()); // "hola"
29
30// .replace() - Reemplazar texto
31console.log(texto.replace("Mundo", "JavaScript")); // "Hola JavaScript"
32
33// .includes() - Verificar si contiene un texto
34console.log(texto.includes("Mundo")); // true
35console.log(texto.includes("Adiós")); // false

💡 Tip importante

Los strings son inmutables en JavaScript. Los métodos NO modifican el string original, sino que devuelven uno nuevo.

Inmutabilidadjavascript
1const original = "hola";
2const mayusculas = original.toUpperCase();
3
4console.log(original); // "hola" (no cambió)
5console.log(mayusculas); // "HOLA" (nuevo string)

5. Ejercicios Prácticos

Ejercicio 1: Calculadora básica

Crea variables para dos números y realiza las operaciones básicas (suma, resta, multiplicación, división).

Planteamientojavascript
1const num1 = 15;
2const num2 = 3;
3
4// Tu código aquí
5
6
7
8
9
10console.log("Suma:", suma);
11console.log("Resta:", resta);
12console.log("Multiplicación:", multiplicacion);
13console.log("División:", division);
Ver solución
Soluciónjavascript
1const num1 = 15;
2const num2 = 3;
3
4const suma = num1 + num2;
5const resta = num1 - num2;
6const multiplicacion = num1 * num2;
7const division = num1 / num2;
8
9console.log("Suma:", suma); // 18
10console.log("Resta:", resta); // 12
11console.log("Multiplicación:", multiplicacion); // 45
12console.log("División:", division); // 5

Ejercicio 2: Verificar mayoría de edad

Crea una variable edad y usa el operador ternario para determinar si es mayor de edad.

Planteamientojavascript
1const edad = 17;
2
3// Tu código aquí
4
5
6console.log(esMayor); // "Menor de edad"
Ver solución
Soluciónjavascript
1const edad = 17;
2const esMayor = edad >= 18 ? "Mayor de edad" : "Menor de edad";
3console.log(esMayor); // "Menor de edad"
4
5// Versión más completa
6const nombre = "Ana";
7const mensaje = `${nombre} es ${edad >= 18 ? "mayor" : "menor"} de edad`;
8console.log(mensaje); // "Ana es menor de edad"

Ejercicio 3: Conversión de temperatura

Convierte grados Celsius a Fahrenheit usando la fórmula: F = (C × 9/5) + 32

Planteamientojavascript
1const celsius = 25;
2
3// Tu código aquí
4
5
6console.log(`${celsius}°C = ${fahrenheit}°F`);
Ver solución
Soluciónjavascript
1const celsius = 25;
2const fahrenheit = (celsius * 9/5) + 32;
3
4console.log(`${celsius}°C = ${fahrenheit}°F`);
5// "25°C = 77°F"
6
7// Con template literal mejorado
8const mensaje = `
9 Temperatura en Celsius: ${celsius}°C
10 Temperatura en Fahrenheit: ${fahrenheit}°F
11`;
12console.log(mensaje);

Ejercicio 4: Validador de DNI

Crea un validador de DNI español. Un DNI válido tiene 8 números y una letra calculada según este algoritmo:

  • Dividir los 8 números entre 23 y obtener el resto
  • El resto corresponde a una letra según esta tabla:

0=T, 1=R, 2=W, 3=A, 4=G, 5=M, 6=Y, 7=F, 8=P, 9=D, 10=X, 11=B

12=N, 13=J, 14=Z, 15=S, 16=Q, 17=V, 18=H, 19=L, 20=C, 21=K, 22=E

Ejemplo: DNI "12345678Z" → 12345678 % 23 = 14 → Letra = Z ✅

📚 Métodos útiles para el ejercicio

.slice(inicio, fin) - Extrae parte de un string → "Hola".slice(0, 2) devuelve "Ho"

.charAt(índice) - Obtiene un carácter → "Hola".charAt(3) devuelve "a"

Number(string) - Convierte a número → Number("123") devuelve 123

% - Resto de división → 14 % 23 devuelve 14

string[índice] - Accede a carácter → "TRWA"[2] devuelve "W"

Ejerciciojavascript
1const dni = "12345678Z";
2const letras = "TRWAGMYFPDXBNJZSQVHLCKE";
3
4// Tu código aquí
5
6
7
8
9console.log(`DNI: ${dni}`);
10console.log(`¿Es válido?: ${esValido ? "✅ SÍ" : "❌ NO"}`);

Desafío extra: Modifica el código para que también valide que el DNI tenga exactamente 9 caracteres usando .length

💻 Pruébalo con interfaz HTML

Copia este código HTML completo en un archivo validador-dni.html y ábrelo en tu navegador para probar el validador de forma interactiva:

validador-dni.htmlhtml
1<!DOCTYPE html>
2<html lang="es">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Validador de DNI</title>
7 <style>
8 body {
9 font-family: Arial, sans-serif;
10 max-width: 500px;
11 margin: 50px auto;
12 padding: 20px;
13 background-color: #1e293b;
14 color: #e2e8f0;
15 }
16 h1 {
17 color: #06b6d4;
18 text-align: center;
19 }
20 .container {
21 background-color: #334155;
22 padding: 30px;
23 border-radius: 10px;
24 box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
25 }
26 label {
27 display: block;
28 margin-bottom: 8px;
29 font-weight: bold;
30 color: #94a3b8;
31 }
32 input {
33 width: 100%;
34 padding: 12px;
35 margin-bottom: 20px;
36 border: 2px solid #475569;
37 border-radius: 5px;
38 font-size: 16px;
39 background-color: #1e293b;
40 color: #e2e8f0;
41 }
42 input:focus {
43 outline: none;
44 border-color: #06b6d4;
45 }
46 button {
47 width: 100%;
48 padding: 12px;
49 background-color: #06b6d4;
50 color: white;
51 border: none;
52 border-radius: 5px;
53 font-size: 16px;
54 font-weight: bold;
55 cursor: pointer;
56 }
57 button:hover {
58 background-color: #0891b2;
59 }
60 .resultado {
61 margin-top: 20px;
62 padding: 15px;
63 border-radius: 5px;
64 font-weight: bold;
65 display: none;
66 }
67 .valido {
68 background-color: #065f46;
69 color: #6ee7b7;
70 border: 2px solid #10b981;
71 }
72 .invalido {
73 background-color: #7f1d1d;
74 color: #fca5a5;
75 border: 2px solid #ef4444;
76 }
77 .detalle {
78 margin-top: 10px;
79 font-size: 14px;
80 color: #cbd5e1;
81 font-weight: normal;
82 }
83 </style>
84</head>
85<body>
86 <h1>🆔 Validador de DNI</h1>
87 <div class="container">
88 <label for="dni">Introduce tu DNI:</label>
89 <input
90 type="text"
91 id="dni"
92 placeholder="Ej: 12345678Z"
93 maxlength="9"
94 >
95 <button onclick="validarDNI()">Validar DNI</button>
96 <div id="resultado" class="resultado"></div>
97 </div>
98
99 <script>
100 function validarDNI() {
101 // 1. Obtener el valor del input y convertirlo a mayúsculas
102 const dni = document.getElementById('dni').value.toUpperCase();
103 const letras = "TRWAGMYFPDXBNJZSQVHLCKE";
104
105 // 2. Extraer los números (primeros 8 caracteres)
106 // TU CÓDIGO AQUÍ
107
108 // 3. Extraer la letra (último carácter)
109 // TU CÓDIGO AQUÍ
110
111 // 4. Convertir los números a Number y calcular el resto de dividir entre 23
112 // TU CÓDIGO AQUÍ
113
114 // 5. Obtener la letra que corresponde a ese resto
115 // TU CÓDIGO AQUÍ
116
117 // 6. Comparar la letra del DNI con la letra calculada (y validar longitud)
118 // TU CÓDIGO AQUÍ
119
120 // 7. Mostrar resultado en la página
121 const resultado = document.getElementById('resultado');
122 resultado.style.display = 'block';
123
124 if (esValido) {
125 resultado.className = 'resultado valido';
126 resultado.innerHTML = `
127 ✅ DNI VÁLIDO
128 <div class="detalle">
129 Números: ${numeros}<br>
130 Letra correcta: ${letra}<br>
131 Resto (÷23): ${resto}
132 </div>
133 `;
134 } else {
135 resultado.className = 'resultado invalido';
136 resultado.innerHTML = `
137 ❌ DNI INVÁLIDO
138 <div class="detalle">
139 Letra proporcionada: ${letra}<br>
140 Letra esperada: ${letraCalculada}<br>
141 El DNI no es correcto
142 </div>
143 `;
144 }
145 }
146
147 // Validar al presionar Enter
148 document.getElementById('dni').addEventListener('keypress', function(e) {
149 if (e.key === 'Enter') {
150 validarDNI();
151 }
152 });
153 </script>
154</body>
155</html>