¿Qué es JavaScript?
JavaScript es el lenguaje de programación que da vida e interactividad a las páginas web. Mientras HTML define la estructura y CSS el estilo, JavaScript controla el comportamiento dinámico.
Agregar JavaScript a HTML
1. JavaScript Inline (no recomendado)
<button onclick="alert('Hola!')">Clic aquí</button>2. JavaScript Interno
<!DOCTYPE html>
<html>
<body>
<h1 id="titulo">Hola Mundo</h1>
<script>
document.getElementById('titulo').style.color = 'blue';
</script>
</body>
</html>3. JavaScript Externo (recomendado)
<!-- Al final del body -->
<script src="script.js"></script>Variables
// var (antigua forma - evitar)
var nombre = "Ana";
// let (valor puede cambiar)
let edad = 25;
edad = 26; // OK
// const (valor constante)
const PI = 3.14159;
// PI = 3.14; // Error!
// Tipos de datos
let texto = "Hola"; // String
let numero = 42; // Number
let decimal = 3.14; // Number
let booleano = true; // Boolean
let nulo = null; // Null
let indefinido; // Undefined
let objeto = {nombre: "Ana"}; // Object
let arreglo = [1, 2, 3]; // ArrayOperadores
// Aritméticos
let suma = 5 + 3; // 8
let resta = 10 - 4; // 6
let multiplicacion = 3 * 4; // 12
let division = 10 / 2; // 5
let modulo = 10 % 3; // 1
let potencia = 2 ** 3; // 8
// Incremento/Decremento
let x = 5;
x++; // 6
x--; // 5
// Comparación
5 == "5" // true (compara valor)
5 === "5" // false (compara valor y tipo)
5 != "5" // false
5 !== "5" // true
5 > 3 // true
5 < 3 // false
5 >= 5 // true
// Lógicos
true && false // false (AND)
true || false // true (OR)
!true // false (NOT)Strings
let nombre = "Ana";
let apellido = "García";
// Concatenación
let nombreCompleto = nombre + " " + apellido;
// Template literals (mejor)
let saludo = `Hola, ${nombre} ${apellido}`;
let multilinea = `
Esta es una cadena
de múltiples líneas
`;
// Métodos de strings
let texto = "JavaScript";
texto.length // 10
texto.toUpperCase() // "JAVASCRIPT"
texto.toLowerCase() // "javascript"
texto.indexOf("Script") // 4
texto.slice(0, 4) // "Java"
texto.split("") // ["J","a","v","a","S","c","r","i","p","t"]
texto.replace("Java", "Type") // "TypeScript"Arrays
// Crear array
let frutas = ["manzana", "pera", "uva"];
let numeros = [1, 2, 3, 4, 5];
let mixto = [1, "texto", true, {nombre: "Ana"}];
// Acceder a elementos
frutas[0] // "manzana"
frutas[2] // "uva"
// Modificar
frutas[1] = "naranja";
// Métodos de arrays
frutas.push("melón"); // Agregar al final
frutas.pop(); // Eliminar del final
frutas.unshift("fresa"); // Agregar al inicio
frutas.shift(); // Eliminar del inicio
frutas.length; // 3
frutas.indexOf("pera"); // 1
frutas.includes("uva"); // true
frutas.join(", "); // "manzana, pera, uva"
// Métodos avanzados
let numeros = [1, 2, 3, 4, 5];
// map - transformar elementos
let dobles = numeros.map(n => n * 2);
// [2, 4, 6, 8, 10]
// filter - filtrar elementos
let pares = numeros.filter(n => n % 2 === 0);
// [2, 4]
// reduce - reducir a un valor
let suma = numeros.reduce((total, n) => total + n, 0);
// 15Objetos
// Crear objeto
let persona = {
nombre: "Ana",
edad: 25,
ciudad: "Madrid",
saludar: function() {
return `Hola, soy ${this.nombre}`;
}
};
// Acceder a propiedades
persona.nombre // "Ana"
persona["edad"] // 25
// Modificar propiedades
persona.edad = 26;
persona.profesion = "Ingeniera";
// Llamar métodos
persona.saludar(); // "Hola, soy Ana"
// Object methods
Object.keys(persona); // ["nombre", "edad", "ciudad", "saludar"]
Object.values(persona); // ["Ana", 26, "Madrid", function]
Object.entries(persona); // [["nombre", "Ana"], ...]Condicionales
// if-else
let edad = 18;
if (edad >= 18) {
console.log("Mayor de edad");
} else {
console.log("Menor de edad");
}
// if-else if-else
let nota = 85;
if (nota >= 90) {
console.log("Excelente");
} else if (nota >= 80) {
console.log("Muy bien");
} else if (nota >= 70) {
console.log("Bien");
} else {
console.log("Necesita mejorar");
}
// Operador ternario
let mensaje = edad >= 18 ? "Mayor" : "Menor";
// switch
let dia = 3;
let nombreDia;
switch(dia) {
case 1:
nombreDia = "Lunes";
break;
case 2:
nombreDia = "Martes";
break;
case 3:
nombreDia = "Miércoles";
break;
default:
nombreDia = "Día inválido";
}Bucles
// for
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
// while
let contador = 0;
while (contador < 5) {
console.log(contador);
contador++;
}
// do-while
let num = 0;
do {
console.log(num);
num++;
} while (num < 5);
// for...of (arrays)
let frutas = ["manzana", "pera", "uva"];
for (let fruta of frutas) {
console.log(fruta);
}
// for...in (objetos)
let persona = {nombre: "Ana", edad: 25};
for (let clave in persona) {
console.log(`${clave}: ${persona[clave]}`);
}
// forEach
frutas.forEach(fruta => {
console.log(fruta);
});Funciones
// Declaración de función
function saludar(nombre) {
return `Hola, ${nombre}`;
}
// Llamar función
let mensaje = saludar("Ana"); // "Hola, Ana"
// Expresión de función
const sumar = function(a, b) {
return a + b;
};
// Arrow function (función flecha)
const multiplicar = (a, b) => a * b;
// Con un parámetro
const cuadrado = x => x ** 2;
// Sin parámetros
const obtenerFecha = () => new Date();
// Parámetros por defecto
function saludarPersona(nombre = "Usuario") {
return `Hola, ${nombre}`;
}
saludarPersona(); // "Hola, Usuario"
saludarPersona("Ana"); // "Hola, Ana"DOM (Document Object Model)
Seleccionar Elementos
// Por ID
let elemento = document.getElementById('miId');
// Por clase
let elementos = document.getElementsByClassName('miClase');
// Por etiqueta
let parrafos = document.getElementsByTagName('p');
// Query selector (más flexible)
let primero = document.querySelector('.miClase');
let todos = document.querySelectorAll('.miClase');Manipular Contenido
let elemento = document.getElementById('titulo');
// Cambiar texto
elemento.textContent = "Nuevo texto";
elemento.innerText = "Otro texto";
// Cambiar HTML
elemento.innerHTML = "<strong>Texto en negrita</strong>";
// Cambiar atributos
elemento.setAttribute('class', 'destacado');
elemento.id = 'nuevoId';
// Cambiar estilos
elemento.style.color = 'blue';
elemento.style.fontSize = '24px';
elemento.style.backgroundColor = 'yellow';
// Agregar/quitar clases
elemento.classList.add('activo');
elemento.classList.remove('inactivo');
elemento.classList.toggle('visible');
elemento.classList.contains('activo'); // true/falseCrear y Eliminar Elementos
// Crear elemento
let nuevoDiv = document.createElement('div');
nuevoDiv.textContent = 'Contenido nuevo';
nuevoDiv.classList.add('caja');
// Agregar al DOM
document.body.appendChild(nuevoDiv);
// Insertar antes de otro elemento
let referencia = document.getElementById('ref');
document.body.insertBefore(nuevoDiv, referencia);
// Eliminar elemento
let elemento = document.getElementById('eliminar');
elemento.remove();
// O desde el padre
let padre = elemento.parentElement;
padre.removeChild(elemento);Eventos
// Onclick
let boton = document.getElementById('miBoton');
boton.onclick = function() {
alert('Clic!');
};
// addEventListener (mejor)
boton.addEventListener('click', function() {
console.log('Botón clickeado');
});
// Con arrow function
boton.addEventListener('click', () => {
console.log('Clic con arrow function');
});
// Event object
boton.addEventListener('click', (event) => {
console.log('Tipo de evento:', event.type);
console.log('Elemento:', event.target);
});
// Tipos de eventos comunes
// click - clic del mouse
// dblclick - doble clic
// mouseenter - mouse entra al elemento
// mouseleave - mouse sale del elemento
// keydown - tecla presionada
// keyup - tecla liberada
// submit - envío de formulario
// change - cambio en input
// focus - elemento enfocado
// blur - elemento desenfocadoFormularios
<!-- HTML -->
<form id="miFormulario">
<input type="text" id="nombre" placeholder="Nombre">
<input type="email" id="email" placeholder="Email">
<button type="submit">Enviar</button>
</form>
<div id="resultado"></div>// JavaScript
let formulario = document.getElementById('miFormulario');
formulario.addEventListener('submit', function(e) {
e.preventDefault(); // Prevenir envío por defecto
// Obtener valores
let nombre = document.getElementById('nombre').value;
let email = document.getElementById('email').value;
// Validar
if (!nombre || !email) {
alert('Completa todos los campos');
return;
}
// Mostrar resultado
let resultado = document.getElementById('resultado');
resultado.innerHTML = `Nombre: ${nombre}, Email: ${email}`;
// Limpiar formulario
formulario.reset();
});Ejemplo Completo: To-Do List
<!-- HTML -->
<div class="container">
<h1>Lista de Tareas</h1>
<input type="text" id="nuevaTarea" placeholder="Nueva tarea">
<button id="agregarBtn">Agregar</button>
<ul id="listaTareas"></ul>
</div>// JavaScript
const input = document.getElementById('nuevaTarea');
const boton = document.getElementById('agregarBtn');
const lista = document.getElementById('listaTareas');
// Agregar tarea
function agregarTarea() {
const textoTarea = input.value.trim();
if (textoTarea === '') {
alert('Escribe una tarea');
return;
}
// Crear elementos
const li = document.createElement('li');
li.textContent = textoTarea;
// Botón eliminar
const btnEliminar = document.createElement('button');
btnEliminar.textContent = 'Eliminar';
btnEliminar.onclick = function() {
li.remove();
};
// Marcar como completada
li.addEventListener('click', function() {
li.classList.toggle('completada');
});
// Agregar a la lista
li.appendChild(btnEliminar);
lista.appendChild(li);
// Limpiar input
input.value = '';
}
// Eventos
boton.addEventListener('click', agregarTarea);
input.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
agregarTarea();
}
});Console Methods
// Logging
console.log('Mensaje normal');
console.info('Información');
console.warn('Advertencia');
console.error('Error');
// Agrupar mensajes
console.group('Mi Grupo');
console.log('Mensaje 1');
console.log('Mensaje 2');
console.groupEnd();
// Tabla
let usuarios = [
{nombre: 'Ana', edad: 25},
{nombre: 'Luis', edad: 30}
];
console.table(usuarios);
// Tiempo
console.time('operacion');
// ... código
console.timeEnd('operacion');Buenas Prácticas
- Usa const y let: Evita var
- Nombres descriptivos: nombreUsuario en vez de x
- Usa === en lugar de ==: Comparación estricta
- Scripts al final del body: O usa defer/async
- Evita variables globales: Usa módulos o IIFE
- Comenta tu código: Especialmente lógica compleja
- Maneja errores: Usa try-catch cuando sea necesario
Conclusión
JavaScript es esencial para crear páginas web interactivas y dinámicas. Dominar variables, funciones, manipulación del DOM y eventos te permitirá dar vida a tus proyectos web. Practica creando pequeños proyectos y gradualmente aumenta la complejidad.