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.
1// Declarar e inicializar2let nombre = "Carlos";3console.log(nombre); // "Carlos"4 5// Reasignar un nuevo valor6nombre = "María";7console.log(nombre); // "María"8 9// Declarar sin valor inicial10let edad;11edad = 25;12console.log(edad); // 25const - Constante (no reasignable)
Usa const cuando el valor NO deba cambiar.
1// Debe inicializarse al declararla2const PI = 3.14159;3console.log(PI); // 3.141594 5// ❌ Esto daría error:6// PI = 3.14; // Error: Assignment to constant variable7 8const nombre = "Ana";9const mayorDeEdad = true;10 11// ⚠️ Importante: const NO hace inmutables los objetos12const persona = { nombre: "Juan" };13persona.nombre = "Pedro"; // ✅ Esto SÍ funciona14persona.edad = 30; // ✅ Esto también15console.log(persona); // { nombre: "Pedro", edad: 30 }var - Forma antigua (evitar)
La forma antigua de declarar variables. No se recomienda usar en código moderno.
1// ❌ Evita usar var en código nuevo2var antiguaVariable = "valor";3 4// ✅ Mejor usa let o const5let 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)
1// Puedes usar comillas simples, dobles o backticks2const nombre = "Juan";3const apellido = 'García';4 5// Template literals (backticks) - permiten interpolación6const saludo = `Hola, ${nombre} ${apellido}`;7console.log(saludo); // "Hola, Juan García"8 9// Saltos de línea y multilínea10const mensaje = `11 Este es un mensaje12 en varias líneas13`;14 15// Métodos comunes16console.log(nombre.length); // 417console.log(nombre.toUpperCase()); // "JUAN"18console.log(nombre.toLowerCase()); // "juan"19console.log(apellido.includes("arc")); // trueNumber (Números)
1// Enteros y decimales2const entero = 42;3const decimal = 3.14159;4const negativo = -273;5 6// Operaciones matemáticas básicas7const suma = 10 + 5; // 158const resta = 10 - 5; // 59const multiplicacion = 10 * 5; // 5010const division = 10 / 5; // 211const modulo = 10 % 3; // 1 (resto de la división)12 13// Valores especiales14const infinito = Infinity;15const noEsNumero = NaN; // Not a Number16 17// Conversión de strings a números18const numero = Number("123"); // 12319const enteroParseado = parseInt("42px"); // 4220const decimalParseado = parseFloat("3.14"); // 3.14Boolean (Booleanos)
1// Solo dos valores posibles: true o false2const esMayorDeEdad = true;3const tieneLicencia = false;4 5// Comparaciones devuelven booleanos6const esIgual = 5 === 5; // true7const esDiferente = 5 !== 3; // true8const esMayor = 10 > 5; // true9const esMenor = 3 < 2; // false10const esMayorOIgual = 5 >= 5; // true11 12// Valores "truthy" y "falsy"13// Falsy: false, 0, "", null, undefined, NaN14// Todo lo demás es "truthy"15 16console.log(Boolean(0)); // false17console.log(Boolean("")); // false18console.log(Boolean("hola")); // true19console.log(Boolean(42)); // truenull y undefined
1// undefined - variable declarada pero sin valor asignado2let variable;3console.log(variable); // undefined4 5// null - ausencia intencional de valor6const sinValor = null;7console.log(sinValor); // null8 9// Diferencia10console.log(typeof undefined); // "undefined"11console.log(typeof null); // "object" (bug histórico de JS)Verificar tipo de dato
1// Operador typeof2console.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
1let a = 10;2let b = 3;3 4console.log(a + b); // 13 - Suma5console.log(a - b); // 7 - Resta6console.log(a * b); // 30 - Multiplicación7console.log(a / b); // 3.333... - División8console.log(a % b); // 1 - Módulo (resto)9console.log(a ** b); // 1000 - Exponenciación (10³)10 11// Incremento y decremento12let contador = 0;13contador++; // Incrementa en 1 (ahora es 1)14contador--; // Decrementa en 1 (ahora es 0)15 16// Pre y post incremento17let x = 5;18console.log(x++); // 5 (devuelve y luego incrementa)19console.log(x); // 620 21let y = 5;22console.log(++y); // 6 (incrementa y luego devuelve)23console.log(y); // 6Operadores de Asignación
1let num = 10;2 3// Asignación compuesta4num += 5; // num = num + 5; → 155num -= 3; // num = num - 3; → 126num *= 2; // num = num * 2; → 247num /= 4; // num = num / 4; → 68num %= 4; // num = num % 4; → 29num **= 3; // num = num ** 3; → 810 11console.log(num); // 8Operadores de Comparación
1// Igualdad estricta (compara valor Y tipo)2console.log(5 === 5); // true3console.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// Desigualdad9console.log(5 !== 3); // true10console.log(5 != "5"); // false11 12// Comparaciones13console.log(10 > 5); // true14console.log(10 < 5); // false15console.log(10 >= 10); // true16console.log(5 <= 3); // false⚠️ Importante
Siempre usa === y !== en lugar de == y !=
Operadores Lógicos
1// AND (&&) - Ambas condiciones deben ser verdaderas2const edad = 20;3const tieneLicencia = true;4 5console.log(edad >= 18 && tieneLicencia); // true6 7// OR (||) - Al menos una condición debe ser verdadera8const esFinde = false;9const esVacaciones = true;10 11console.log(esFinde || esVacaciones); // true12 13// NOT (!) - Niega el valor14const esDeDia = true;15console.log(!esDeDia); // false16 17// Combinaciones18const temperatura = 25;19const esSoleado = true;20 21const buenDiaParaPlaya = temperatura > 20 && esSoleado;22console.log(buenDiaParaPlaya); // true23 24// Operador nullish coalescing (??)25const nombre = null;26const nombrePorDefecto = nombre ?? "Anónimo";27console.log(nombrePorDefecto); // "Anónimo"Operador Ternario
1// Sintaxis: condición ? valorSiTrue : valorSiFalse2const 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 ejemplo15const precio = 100;16const descuento = precio > 50 ? 10 : 5;17console.log(descuento); // 1018 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:
1const texto = "Hola Mundo";2 3// .length - Obtener longitud4console.log(texto.length); // 105 6// .slice(inicio, fin) - Extraer una parte del string7console.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 slice12console.log(texto.substring(0, 4)); // "Hola"13 14// .charAt(índice) - Obtener carácter en posición15console.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 final27const conEspacios = " hola ";28console.log(conEspacios.trim()); // "hola"29 30// .replace() - Reemplazar texto31console.log(texto.replace("Mundo", "JavaScript")); // "Hola JavaScript"32 33// .includes() - Verificar si contiene un texto34console.log(texto.includes("Mundo")); // true35console.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.
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).
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
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); // 1810console.log("Resta:", resta); // 1211console.log("Multiplicación:", multiplicacion); // 4512console.log("División:", division); // 5Ejercicio 2: Verificar mayoría de edad
Crea una variable edad y usa el operador ternario para determinar si es mayor de edad.
1const edad = 17;2 3// Tu código aquí4 5 6console.log(esMayor); // "Menor de edad" Ver solución
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 completa6const 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
1const celsius = 25;2 3// Tu código aquí4 5 6console.log(`${celsius}°C = ${fahrenheit}°F`); Ver solución
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 mejorado8const mensaje = `9 Temperatura en Celsius: ${celsius}°C10 Temperatura en Fahrenheit: ${fahrenheit}°F11`;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"
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:
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 <input90 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úsculas102 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 23112 // TU CÓDIGO AQUÍ113 114 // 5. Obtener la letra que corresponde a ese resto115 // 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ágina121 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ÁLIDO128 <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ÁLIDO138 <div class="detalle">139 Letra proporcionada: ${letra}<br>140 Letra esperada: ${letraCalculada}<br>141 El DNI no es correcto142 </div>143 `;144 }145 }146 147 // Validar al presionar Enter148 document.getElementById('dni').addEventListener('keypress', function(e) {149 if (e.key === 'Enter') {150 validarDNI();151 }152 });153 </script>154</body>155</html>