Introducción a JavaScript
1.1. ¿Qué es JavaScript?
JavaScript es un lenguaje de programación dinámico y versátil que se utiliza principalmente para crear y controlar contenido interactivo en páginas web.
A diferencia de HTML y CSS, que se utilizan para estructurar y diseñar páginas web respectivamente, JavaScript permite a los desarrolladores implementar funciones complejas y mejorar la interactividad de las páginas web. Esto incluye tareas como actualizar el contenido de una página sin necesidad de recargarla, validar formularios en el lado del cliente, crear animaciones y manejar eventos del usuario como clics y desplazamientos.
JavaScript se ejecuta en el navegador del cliente, lo que significa que el código se interpreta y se ejecuta directamente en el dispositivo del usuario, proporcionando una experiencia de usuario rápida y eficiente. Además, con la introducción de Node.js, JavaScript también puede ejecutarse en el servidor, permitiendo a los desarrolladores usar un solo lenguaje para ambos lados del desarrollo web (frontend y backend).
La popularidad de JavaScript ha dado lugar a una amplia variedad de bibliotecas y frameworks, como React, Angular y Vue.js, que facilitan y agilizan el desarrollo de aplicaciones web complejas. Su continua evolución y la creciente comunidad de desarrolladores aseguran que JavaScript seguirá siendo un componente clave en el desarrollo web durante muchos años.
1.2. Historia de JavaScript
JavaScript fue creado en 1995 por Brendan Eich, un programador de Netscape Communications, en un esfuerzo por agregar interactividad a las páginas web. Originalmente conocido como Mocha, luego renombrado a LiveScript, y finalmente a JavaScript, el lenguaje fue desarrollado en apenas 10 días. La intención era crear un lenguaje que fuera fácil de usar para los desarrolladores web, complementando HTML y CSS.
En sus primeros años, JavaScript fue principalmente utilizado para pequeños scripts y validaciones de formularios en el navegador. Sin embargo, su capacidad para manipular el Document Object Model (DOM) del navegador y responder a eventos del usuario rápidamente lo hizo popular.
En 1996, Microsoft lanzó JScript, una implementación propia de JavaScript, para su navegador Internet Explorer, lo que inició una guerra de navegadores. Esta competencia llevó a la necesidad de estandarizar el lenguaje, resultando en la creación de ECMAScript por Ecma International en 1997. ECMAScript es el estándar en el que se basa JavaScript y se ha ido actualizando con el tiempo para incorporar nuevas características y mejorar el lenguaje.
A lo largo de los años 2000, la adopción de JavaScript se disparó con la llegada de tecnologías como AJAX, que permitieron la creación de aplicaciones web más dinámicas y reactivas. La popularidad de JavaScript continuó creciendo, especialmente con la aparición de frameworks y bibliotecas como jQuery, que simplificaron muchas tareas comunes.
El lanzamiento de Node.js en 2009 revolucionó el uso de JavaScript al permitir su ejecución en el lado del servidor, abriendo nuevas posibilidades para los desarrolladores y consolidando JavaScript como un lenguaje versátil y ubicuo.
Hoy en día, JavaScript es un componente esencial del desarrollo web, utilizado tanto en el frontend como en el backend, y continúa evolucionando con contribuciones constantes de una comunidad global de desarrolladores.
Instalación y configuración del entorno de desarrollo
Editores de código recomendados
Para empezar a desarrollar en JavaScript, es esencial contar con un buen editor de código que facilite la escritura, el análisis y la depuración del código. Algunos de los editores más recomendados son:
- Visual Studio Code (VS Code): Este editor, desarrollado por Microsoft, es altamente popular entre los desarrolladores debido a su extensibilidad, soporte para múltiples lenguajes, y características avanzadas como IntelliSense, integración con Git, y una amplia gama de extensiones disponibles en el marketplace.
- Sublime Text: Conocido por su rapidez y capacidad de respuesta, Sublime Text es un editor de código ligero pero potente. Ofrece características como el «Goto Anything», selección múltiple y edición dividida, que facilitan la navegación y edición del código.
- Atom: Desarrollado por GitHub, Atom es un editor de código libre y de código abierto que es altamente personalizable. Cuenta con numerosas extensiones y temas, así como integración con Git y GitHub.
- WebStorm: Este IDE de JetBrains está específicamente diseñado para el desarrollo web y ofrece herramientas avanzadas para trabajar con JavaScript, TypeScript, Node.js y frameworks modernos. Su característica de autocompletado y depuración en tiempo real es muy valorada.
Configuración del navegador
Para probar y depurar tu código JavaScript, necesitarás configurar tu navegador de desarrollo. Aquí se muestran pasos básicos para hacerlo:
- Google Chrome:
- Herramientas de desarrollo (DevTools): Abre DevTools con
Ctrl+Shift+I
(Windows/Linux) oCmd+Option+I
(Mac). DevTools incluye una consola JavaScript, un depurador, y herramientas para inspeccionar el DOM, entre otras funcionalidades. - Extensiones útiles: Considera instalar extensiones como React Developer Tools o Vue.js devtools si trabajas con estos frameworks.
- Herramientas de desarrollo (DevTools): Abre DevTools con
- Mozilla Firefox:
- Firefox Developer Tools: Accede a ellas con
Ctrl+Shift+I
(Windows/Linux) oCmd+Option+I
(Mac). Firefox ofrece herramientas robustas para depurar JavaScript, inspeccionar el DOM y analizar el rendimiento de tu aplicación. - Firebug (legacy): Aunque Firebug ha sido integrado en las herramientas de desarrollo de Firefox, aún puedes encontrar recursos y funcionalidades que fueron populares en esta extensión.
- Firefox Developer Tools: Accede a ellas con
- Microsoft Edge:
- Edge DevTools: Similar a Chrome DevTools, Edge DevTools proporciona una consola JavaScript, herramientas de depuración y análisis de rendimiento. Accede a ellas con
Ctrl+Shift+I
(Windows/Linux) oCmd+Option+I
(Mac).
- Edge DevTools: Similar a Chrome DevTools, Edge DevTools proporciona una consola JavaScript, herramientas de depuración y análisis de rendimiento. Accede a ellas con
Configurar correctamente tu editor de código y navegador te permitirá escribir, probar y depurar tu código JavaScript de manera más eficiente, mejorando así tu flujo de trabajo como desarrollador.
Fundamentos de JavaScript
2.1. Sintaxis básica
JavaScript es un lenguaje de programación de alto nivel, conocido por su sintaxis accesible y su flexibilidad. A continuación, se presentan algunos de los elementos fundamentales de su sintaxis:
Variables y constantes
En JavaScript, las variables pueden declararse usando var
, let
, o const
:
var
se utilizaba en versiones antiguas y tiene un alcance global o de función.let
se utiliza para variables que pueden cambiar su valor y tiene un alcance de bloque.const
se utiliza para constantes, cuyos valores no pueden cambiar y también tiene un alcance de bloque.
javascript
var nombre = "Juan";
let edad = 30;
const PI = 3.1416;
Tipos de datos
JavaScript maneja varios tipos de datos primitivos:
- String: Cadenas de texto.
- Number: Números enteros y de punto flotante.
- Boolean: Valores lógicos (true o false).
- Null: Representa la ausencia intencional de un valor.
- Undefined: Indica que una variable no tiene un valor asignado.
javascript
let mensaje = "Hola, mundo"; // String
let numero = 42; // Number
let esVerdad = true; // Boolean
let vacio = null; // Null
let sinDefinir; // Undefined
Operadores
JavaScript incluye una variedad de operadores para realizar operaciones:
- Aritméticos:
+
,-
,*
,/
,%
(módulo). - Asignación:
=
,+=
,-=
,*=
,/=
,%=
. - Comparación:
==
,!=
,===
,!==
,<
,>
,<=
,>=
. - Lógicos:
&&
(AND),||
(OR),!
(NOT).
javascript
let suma = 5 + 3; // 8
let esIgual = (5 == 5); // true
let esEstricto = (5 === "5"); // false
let resultado = (5 > 3) && (3 < 2); // false
Estructuras de control
JavaScript utiliza estructuras de control para la toma de decisiones y la iteración:
- Condicionales:
if
,else if
,else
, yswitch
. - Bucles:
for
,while
,do...while
.
javascript
if (edad >= 18) {
console.log("Eres mayor de edad");
} else {
console.log("Eres menor de edad");
}
for (let i = 0; i < 5; i++) {
console.log(i);
}
Funciones
Las funciones en JavaScript se utilizan para encapsular bloques de código que pueden ser reutilizados. Se pueden declarar de varias maneras:
- Declaración de función:
javascript
function saludar(nombre) {
return `Hola, ${nombre}`;
}
- Expresión de función:
javascript
const despedirse = function(nombre) {
return `Adiós, ${nombre}`;
};
- Función flecha (introducida en ES6):
javascript
const multiplicar = (a, b) => a * b;
Estos elementos básicos de la sintaxis de JavaScript proporcionan una base sólida para comenzar a escribir código interactivo y dinámico para aplicaciones web.
Tipos de datos en JavaScript
JavaScript maneja varios tipos de datos que se pueden clasificar en dos categorías principales: primitivos y complejos.
Tipos de datos primitivos
- String
- Los valores de tipo string representan cadenas de texto. Se pueden definir utilizando comillas simples (‘ ‘), comillas dobles (» «) o comillas invertidas () para strings de múltiples líneas y con interpolación de variables.
let nombre = "Juan";
let saludo = 'Hola';
let mensaje = `Hola, ${nombre}`;
Number
- Representan tanto números enteros como de punto flotante. JavaScript no distingue entre números enteros y flotantes.
javascript
let entero = 42;
let decimal = 3.14;
Boolean
- Los valores booleanos solo pueden ser
true
ofalse
, y se utilizan comúnmente en estructuras de control para la toma de decisiones.
javascript
let esVerdadero = true;
let esFalso = false;
Null
- Representa la ausencia intencional de cualquier valor de objeto. Se utiliza para indicar que una variable no tiene ningún valor.
javascript
let vacio = null;
Undefined
- Una variable que se ha declarado pero no se le ha asignado un valor tiene el valor
undefined
.
javascript
let sinValor;
Symbol (introducido en ES6)
- Representa un valor único y anónimo. Se utiliza para crear identificadores únicos para las propiedades de los objetos.
javascript
let simbolo = Symbol('descripcion');
Tipos de datos complejos
- Object
- Los objetos son colecciones de propiedades clave-valor. Las propiedades pueden contener valores de cualquier tipo de datos, incluyendo otros objetos.
let persona = {
nombre: "Juan",
edad: 30,
saludar: function() {
return `Hola, soy ${this.nombre}`;
}
};
Array
- Los arrays son listas ordenadas de elementos. Cada elemento puede ser de cualquier tipo de datos, y los arrays pueden contener una mezcla de diferentes tipos.
javascript
let numeros = [1, 2, 3, 4, 5];
let mezcla = [1, "dos", true, null];
Function
- Las funciones son bloques de código reutilizables que se pueden definir y luego ejecutar. En JavaScript, las funciones son objetos de primera clase, lo que significa que pueden ser asignadas a variables, pasadas como argumentos a otras funciones y devueltas desde funciones.
javascript
function sumar(a, b) { return a + b; } const multiplicar = function(a, b) { return a * b; }; const dividir = (a, b) => a / b;
Ejemplo práctico
Aquí hay un ejemplo que demuestra cómo usar estos tipos de datos en un contexto más amplio:
javascript
let nombre = "Juan"; // String
let edad = 30; // Number
let esEstudiante = true; // Boolean
let direccion = null; // Null
let telefono; // Undefined
let id = Symbol('id'); // Symbol
let persona = {
nombre: nombre,
edad: edad,
esEstudiante: esEstudiante,
direccion: direccion,
telefono: telefono,
id: id,
cursos: ["Matemáticas", "Inglés"], // Array
saludar: function() { // Function
return `Hola, soy ${this.nombre}`;
}
};
console.log(persona.saludar());
Este ejemplo crea un objeto persona
que incluye varios tipos de datos, mostrando cómo pueden interactuar entre sí en JavaScript.
Variables y constantes
En JavaScript, la gestión de variables y constantes es fundamental para la manipulación de datos y el control del flujo de un programa. La declaración de variables se puede realizar utilizando var
, let
y const
, cada uno con características y comportamientos específicos que los hacen adecuados para diferentes situaciones.
Declaración con var
var
fue el método original para declarar variables en JavaScript. Tiene un alcance de función o global, lo que significa que una variable declarada con var
estará disponible en todo el ámbito de la función donde se declaró o en el ámbito global si se declaró fuera de cualquier función.
javascript
function ejemploVar() {
var mensaje = "Hola, mundo";
if (true) {
var mensaje = "Hola, bloque";
console.log(mensaje); // "Hola, bloque"
}
console.log(mensaje); // "Hola, bloque"
}
ejemploVar();
En este ejemplo, la variable mensaje
dentro del bloque if
sobreescribe la variable mensaje
declarada anteriormente en la misma función. Este comportamiento puede llevar a errores difíciles de rastrear en el código.
Declaración con let
Introducido en ECMAScript 6 (ES6), let
permite declarar variables con un alcance de bloque, lo que significa que la variable solo está disponible dentro del bloque {}
en el que se define. Esto ayuda a evitar problemas de sobrescritura y a mejorar la legibilidad del código.
javascript
function ejemploLet() {
let mensaje = "Hola, mundo";
if (true) {
let mensaje = "Hola, bloque";
console.log(mensaje); // "Hola, bloque"
}
console.log(mensaje); // "Hola, mundo"
}
ejemploLet();
En este caso, la variable mensaje
dentro del bloque if
es una entidad completamente separada de la variable mensaje
fuera del bloque, lo que evita la sobrescritura accidental.
Declaración con const
También introducido en ES6, const
se utiliza para declarar constantes, es decir, valores que no pueden ser reasignados después de su inicialización. Al igual que let
, const
tiene un alcance de bloque.
javascript
function ejemploConst() {
const mensaje = "Hola, mundo";
if (true) {
const mensaje = "Hola, bloque";
console.log(mensaje); // "Hola, bloque"
}
console.log(mensaje); // "Hola, mundo"
}
ejemploConst();
Aunque const
impide la reasignación de la variable, no hace que el valor sea inmutable. Si la constante es un objeto o un array, sus propiedades o elementos pueden ser modificados.
javascript
const persona = {
nombre: "Juan",
edad: 30
};
persona.edad = 31; // Esto es válido
console.log(persona.edad); // 31
const numeros = [1, 2, 3];
numeros.push(4); // Esto es válido
console.log(numeros); // [1, 2, 3, 4]
Elección entre var
, let
y const
var
: Se recomienda evitar su uso debido a su comportamiento de alcance de función o global, que puede llevar a errores imprevistos.let
: Utilizalet
para variables que pueden cambiar su valor y necesitan un alcance de bloque.const
: Utilizaconst
para valores que no deberían cambiar una vez asignados, asegurando así la inmutabilidad de la referencia.
Buenas prácticas
- Preferir
const
sobrelet
: Utilizaconst
de manera predeterminada y cambia alet
solo cuando sepas que el valor de la variable necesitará ser reasignado. - Evitar
var
: Para minimizar errores y mejorar la claridad del código, evita el uso devar
y prefierelet
oconst
. - Nombres descriptivos: Usa nombres de variables y constantes que sean descriptivos y claros, lo que facilita la comprensión del código.
En conclusión, comprender las diferencias entre var
, let
y const
y saber cuándo usar cada uno es crucial para escribir código JavaScript eficiente, claro y libre de errores. Estas herramientas permiten a los desarrolladores gestionar mejor el alcance de las variables y mantener la integridad de los datos en sus programas.
Operadores
Los operadores en JavaScript son símbolos que realizan operaciones sobre uno o más operandos. Estos operadores son fundamentales para manipular datos y controlar el flujo de un programa. A continuación, se presentan los diferentes tipos de operadores disponibles en JavaScript: aritméticos, de asignación, de comparación y lógicos.
Operadores aritméticos
Los operadores aritméticos realizan operaciones matemáticas sobre números.
- Suma (
+
)- Suma dos operandos.
let resultado = 5 + 3; // 8
Resta (-
)
- Resta el segundo operando del primero.
javascript
let resultado = 5 - 3; // 2
Multiplicación (*
)
- Multiplica dos operandos.
javascript
let resultado = 5 * 3; // 15
División (/
)
- Divide el primer operando por el segundo.
javascript
let resultado = 6 / 3; // 2
Módulo (%
)
- Devuelve el resto de la división del primer operando por el segundo.
javascript
let resultado = 5 % 2; // 1
Incremento (++
)
- Incrementa el operando en uno.
javascript
let numero = 5;
numero++; // 6
Decremento (--
)
- Decrementa el operando en uno.
javascript
let numero = 5; numero--; // 4
Operadores de asignación
Los operadores de asignación asignan valores a las variables.
- Asignación (
=
)- Asigna el valor del operando derecho al operando izquierdo.
let x = 5;
Asignación de suma (+=
)
- Suma el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x += 3; // x = 8
Asignación de resta (-=
)
- Resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x -= 3; // x = 2
Asignación de multiplicación (*=
)
- Multiplica el operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x *= 3; // x = 15
Asignación de división (/=
)
- Divide el operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 6;
x /= 3; // x = 2
Asignación de módulo (%=
)
- Calcula el módulo del operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 5; x %= 2; // x = 1
Operadores de comparación
Los operadores de comparación comparan dos valores y devuelven un valor booleano (true
o false
).
- Igualdad (
==
)- Compara si dos valores son iguales, sin considerar el tipo.
let resultado = 5 == "5"; // true
Desigualdad (!=
)
- Compara si dos valores no son iguales, sin considerar el tipo.
javascript
let resultado = 5 != "5"; // false
Igualdad estricta (===
)
- Compara si dos valores son iguales y del mismo tipo.
javascript
let resultado = 5 === 5; // true
let resultado2 = 5 === "5"; // false
Desigualdad estricta (!==
)
- Compara si dos valores no son iguales o no son del mismo tipo.
javascript
let resultado = 5 !== 5; // false
let resultado2 = 5 !== "5"; // true
Mayor que (>
)
- Compara si el operando izquierdo es mayor que el derecho.
javascript
let resultado = 5 > 3; // true
Mayor o igual que (>=
)
- Compara si el operando izquierdo es mayor o igual que el derecho.
javascript
let resultado = 5 >= 5; // true
Menor que (<
)
- Compara si el operando izquierdo es menor que el derecho.
javascript
let resultado = 3 < 5; // true
Menor o igual que (<=
)
- Compara si el operando izquierdo es menor o igual que el derecho.
javascript
let resultado = 3 <= 5; // true
Operadores lógicos
Los operadores lógicos se utilizan para combinar expresiones booleanas.
- AND (
&&
)- Devuelve
true
si ambos operandos son verdaderos.
- Devuelve
let resultado = true && false; // false
OR (||
)
- Devuelve
true
si al menos uno de los operandos es verdadero.
javascript
let resultado = true || false; // true
NOT (!
)
- Invierte el valor de un operando booleano.
javascript
let resultado = !true; // false
Ejemplo práctico
A continuación, se muestra un ejemplo que utiliza varios tipos de operadores en una función:
function evaluarEdad(edad) {
if (edad >= 18) {
console.log("Eres mayor de edad");
} else {
console.log("Eres menor de edad");
}
let esAdulto = (edad >= 18) ? true : false;
console.log("Es adulto:", esAdulto);
let mensaje = "Tu edad es " + edad;
console.log(mensaje);
let multiplicacion = edad * 2;
console.log("El doble de tu edad es " + multiplicacion);
let operacionCompleja = (edad > 10 && edad < 20) || edad === 18;
console.log("Cumple la condición compleja:", operacionCompleja);
}
evaluarEdad(15);
Este ejemplo demuestra el uso de operadores aritméticos, de asignación, de comparación y lógicos en un contexto práctico para evaluar la edad de una persona y generar mensajes basados en diferentes condiciones.
Comprender y utilizar correctamente los operadores en JavaScript es esencial para escribir código efectivo y eficiente. Estos operadores permiten realizar una amplia gama de operaciones, desde cálculos simples hasta evaluaciones lógicas complejas.
Control de flujo
Operadores en JavaScript
Los operadores en JavaScript son símbolos que realizan operaciones sobre uno o más operandos. Estos operadores son fundamentales para manipular datos y controlar el flujo de un programa. A continuación, se presentan los diferentes tipos de operadores disponibles en JavaScript: aritméticos, de asignación, de comparación y lógicos.
Operadores aritméticos
Los operadores aritméticos realizan operaciones matemáticas sobre números.
- Suma (
+
)- Suma dos operandos.
let resultado = 5 + 3; // 8
Resta (-
)
- Resta el segundo operando del primero.
javascript
let resultado = 5 - 3; // 2
Multiplicación (*
)
- Multiplica dos operandos.
javascript
let resultado = 5 * 3; // 15
División (/
)
- Divide el primer operando por el segundo.
javascript
let resultado = 6 / 3; // 2
Módulo (%
)
- Devuelve el resto de la división del primer operando por el segundo.
javascript
let resultado = 5 % 2; // 1
Incremento (++
)
- Incrementa el operando en uno.
javascript
let numero = 5;
numero++; // 6
Decremento (--
)
- Decrementa el operando en uno.
javascript
let numero = 5; numero--; // 4
Operadores de asignación
Los operadores de asignación asignan valores a las variables.
- Asignación (
=
)- Asigna el valor del operando derecho al operando izquierdo.
let x = 5;
Asignación de suma (+=
)
- Suma el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x += 3; // x = 8
Asignación de resta (-=
)
- Resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x -= 3; // x = 2
Asignación de multiplicación (*=
)
- Multiplica el operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 5;
x *= 3; // x = 15
Asignación de división (/=
)
- Divide el operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 6;
x /= 3; // x = 2
Asignación de módulo (%=
)
- Calcula el módulo del operando izquierdo por el operando derecho y asigna el resultado al operando izquierdo.
javascript
let x = 5; x %= 2; // x = 1
Operadores de comparación
Los operadores de comparación comparan dos valores y devuelven un valor booleano (true
o false
).
- Igualdad (
==
)- Compara si dos valores son iguales, sin considerar el tipo.
let resultado = 5 == "5"; // true
Desigualdad (!=
)
- Compara si dos valores no son iguales, sin considerar el tipo.
javascript
let resultado = 5 != "5"; // false
Igualdad estricta (===
)
- Compara si dos valores son iguales y del mismo tipo.
javascript
let resultado = 5 === 5; // true
let resultado2 = 5 === "5"; // false
Desigualdad estricta (!==
)
- Compara si dos valores no son iguales o no son del mismo tipo.
javascript
let resultado = 5 !== 5; // false
let resultado2 = 5 !== "5"; // true
Mayor que (>
)
- Compara si el operando izquierdo es mayor que el derecho.
javascript
let resultado = 5 > 3; // true
Mayor o igual que (>=
)
- Compara si el operando izquierdo es mayor o igual que el derecho.
javascript
let resultado = 5 >= 5; // true
Menor que (<
)
- Compara si el operando izquierdo es menor que el derecho.
javascript
let resultado = 3 < 5; // true
Menor o igual que (<=
)
- Compara si el operando izquierdo es menor o igual que el derecho.
javascript
let resultado = 3 <= 5; // true
Operadores lógicos
Los operadores lógicos se utilizan para combinar expresiones booleanas.
- AND (
&&
)- Devuelve
true
si ambos operandos son verdaderos.
- Devuelve
let resultado = true && false; // false
OR (||
)
- Devuelve
true
si al menos uno de los operandos es verdadero.
javascript
let resultado = true || false; // true
NOT (!
)
- Invierte el valor de un operando booleano.
javascript
let resultado = !true; // false
Ejemplo práctico
A continuación, se muestra un ejemplo que utiliza varios tipos de operadores en una función:
javascript
function evaluarEdad(edad) {
if (edad >= 18) {
console.log("Eres mayor de edad");
} else {
console.log("Eres menor de edad");
}
let esAdulto = (edad >= 18) ? true : false;
console.log("Es adulto:", esAdulto);
let mensaje = "Tu edad es " + edad;
console.log(mensaje);
let multiplicacion = edad * 2;
console.log("El doble de tu edad es " + multiplicacion);
let operacionCompleja = (edad > 10 && edad < 20) || edad === 18;
console.log("Cumple la condición compleja:", operacionCompleja);
}
evaluarEdad(15);
Este ejemplo demuestra el uso de operadores aritméticos, de asignación, de comparación y lógicos en un contexto práctico para evaluar la edad de una persona y generar mensajes basados en diferentes condiciones.
Comprender y utilizar correctamente los operadores en JavaScript es esencial para escribir código efectivo y eficiente. Estos operadores permiten realizar una amplia gama de operaciones, desde cálculos simples hasta evaluaciones lógicas complejas.
escribe un texto sobre Estructuras condicionales javascript – if…else – switchChatGPT
Estructuras condicionales en JavaScript
Las estructuras condicionales en JavaScript permiten ejecutar diferentes bloques de código en función de ciertas condiciones. Las dos estructuras condicionales más comunes en JavaScript son if...else
y switch
.
if...else
La estructura if...else
se utiliza para ejecutar un bloque de código si una condición es verdadera y otro bloque de código si la condición es falsa. Esta estructura también puede extenderse con else if
para manejar múltiples condiciones.
Sintaxis:
javascript
if (condicion) {
// Código a ejecutar si la condición es verdadera
} else if (otraCondicion) {
// Código a ejecutar si la otra condición es verdadera
} else {
// Código a ejecutar si ninguna de las condiciones anteriores es verdadera
}
Ejemplo:
javascript
let edad = 20;
if (edad < 18) {
console.log("Eres menor de edad.");
} else if (edad >= 18 && edad < 65) {
console.log("Eres un adulto.");
} else {
console.log("Eres un adulto mayor.");
}
En este ejemplo, el programa verifica la variable edad
y ejecuta diferentes mensajes dependiendo de si la persona es menor de edad, un adulto o un adulto mayor.
switch
La estructura switch
se utiliza para ejecutar uno de varios bloques de código basado en el valor de una expresión. Es útil cuando se necesita comparar una misma variable o expresión con varios valores diferentes.
Sintaxis:
javascript
switch (expresion) {
case valor1:
// Código a ejecutar si la expresión es igual a valor1
break;
case valor2:
// Código a ejecutar si la expresión es igual a valor2
break;
// Se pueden agregar más casos según sea necesario
default:
// Código a ejecutar si ninguno de los casos coincide con la expresión
}
Ejemplo:
javascript
let dia = 3;
let nombreDia;
switch (dia) {
case 1:
nombreDia = "Lunes";
break;
case 2:
nombreDia = "Martes";
break;
case 3:
nombreDia = "Miércoles";
break;
case 4:
nombreDia = "Jueves";
break;
case 5:
nombreDia = "Viernes";
break;
case 6:
nombreDia = "Sábado";
break;
case 7:
nombreDia = "Domingo";
break;
default:
nombreDia = "Día inválido";
}
console.log(nombreDia); // "Miércoles"
En este ejemplo, la variable dia
se compara con varios casos. Cuando el valor de dia
es 3
, se asigna «Miércoles» a la variable nombreDia
.
Comparación entre if...else
y switch
- Uso recomendado de
if...else
: Es más adecuado cuando se tienen condiciones complejas que involucran operadores lógicos o relacionales, o cuando se manejan comparaciones numéricas o de rangos. - Uso recomendado de
switch
: Es más legible y ordenado cuando se trata de una sola variable que puede tener varios valores posibles. Especialmente útil para manejar menús de opciones o días de la semana.
Ejemplo combinado:
javascript
let puntuacion = 85;
let calificacion;
if (puntuacion >= 90) {
calificacion = 'A';
} else if (puntuacion >= 80) {
calificacion = 'B';
} else if (puntuacion >= 70) {
calificacion = 'C';
} else if (puntuacion >= 60) {
calificacion = 'D';
} else {
calificacion = 'F';
}
console.log(`Calificación: ${calificacion}`); // "Calificación: B"
let fruta = "manzana";
switch (fruta) {
case "manzana":
console.log("Es una manzana.");
break;
case "banana":
console.log("Es una banana.");
break;
case "naranja":
console.log("Es una naranja.");
break;
default:
console.log("Fruta desconocida.");
}
En este ejemplo combinado, se utiliza if...else
para asignar una calificación basada en la puntuación, y switch
para identificar el tipo de fruta. Cada estructura se usa en el contexto más adecuado para mejorar la claridad y legibilidad del código.
Bucles
Los bucles en JavaScript son estructuras que permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición específica. Existen varios tipos de bucles en JavaScript, cada uno con características y usos específicos. A continuación, se describen los bucles for
, while
, do...while
, for...in
, y for...of
.
Bucle for
El bucle for
se utiliza cuando se sabe de antemano cuántas veces se desea ejecutar un bloque de código. Este bucle consta de tres partes: inicialización, condición y actualización.
Sintaxis:
javascript
for (inicializacion; condicion; actualizacion) {
// Código a ejecutar en cada iteración
}
Ejemplo:
javascript
for (let i = 0; i < 5; i++) {
console.log(i); // Imprime los números del 0 al 4
}
En este ejemplo, la variable i
se inicializa a 0, el bucle se ejecuta mientras i
sea menor que 5, y i
se incrementa en 1 en cada iteración.
Bucle while
El bucle while
se utiliza cuando se desea repetir un bloque de código mientras se cumpla una condición específica. Es útil cuando no se sabe de antemano cuántas veces se debe ejecutar el bucle.
Sintaxis:
javascript
while (condicion) {
// Código a ejecutar en cada iteración
}
Ejemplo:
javascript
let i = 0;
while (i < 5) {
console.log(i); // Imprime los números del 0 al 4
i++;
}
En este ejemplo, el bucle while
continúa ejecutándose mientras i
sea menor que 5, incrementando i
en cada iteración.
Bucle do...while
El bucle do...while
es similar al while
, pero garantiza que el bloque de código se ejecute al menos una vez antes de evaluar la condición.
Sintaxis:
javascript
do {
// Código a ejecutar en cada iteración
} while (condicion);
Ejemplo:
javascript
let i = 0;
do {
console.log(i); // Imprime los números del 0 al 4
i++;
} while (i < 5);
En este ejemplo, el bucle do...while
asegura que el bloque de código se ejecute al menos una vez antes de verificar si i
es menor que 5.
Bucle for...in
El bucle for...in
se utiliza para iterar sobre las propiedades enumerables de un objeto, recorriendo las claves de dicho objeto.
Sintaxis:
javascript
for (clave in objeto) {
// Código a ejecutar para cada clave
}
Ejemplo:
javascript
const persona = { nombre: "Juan", edad: 30, ciudad: "Madrid" };
for (let clave in persona) {
console.log(`${clave}: ${persona[clave]}`);
}
// Imprime:
// nombre: Juan
// edad: 30
// ciudad: Madrid
En este ejemplo, el bucle for...in
recorre las propiedades del objeto persona
e imprime cada clave y su valor correspondiente.
Bucle for...of
El bucle for...of
se utiliza para iterar sobre elementos de colecciones iterables como arrays, strings, mapas, conjuntos y otros objetos con un protocolo iterable.
Sintaxis:
javascript
for (elemento of iterable) {
// Código a ejecutar para cada elemento
}
Ejemplo:
javascript
const numeros = [1, 2, 3, 4, 5];
for (let numero of numeros) {
console.log(numero); // Imprime los números del 1 al 5
}
En este ejemplo, el bucle for...of
recorre los elementos del array numeros
e imprime cada número.
Comparación y usos
for
: Ideal para bucles con un número fijo de iteraciones o cuando se necesita un índice para acceder a elementos de un array.while
: Adecuado cuando el número de iteraciones no se conoce de antemano y depende de una condición que se evalúa antes de cada iteración.do...while
: Útil cuando se desea ejecutar el bloque de código al menos una vez, independientemente de si la condición es verdadera o falsa.for...in
: Se utiliza principalmente para iterar sobre propiedades de objetos.for...of
: Preferido para iterar sobre elementos de colecciones iterables, proporcionando una forma más legible y directa de acceder a los elementos.
Ejemplo combinado
A continuación, un ejemplo que utiliza diferentes tipos de bucles para demostrar su uso en diversas situaciones:
// Uso de for para recorrer un array
const numeros = [1, 2, 3, 4, 5];
for (let i = 0; i < numeros.length; i++) {
console.log(numeros[i]);
}
// Uso de while para encontrar el primer número mayor que 3
let i = 0;
while (numeros[i] <= 3) {
i++;
}
console.log(`El primer número mayor que 3 es: ${numeros[i]}`);
// Uso de do...while para sumar números hasta que la suma sea mayor que 10
let suma = 0;
i = 0;
do {
suma += numeros[i];
i++;
} while (suma <= 10);
console.log(`La suma es: ${suma}`);
// Uso de for...in para iterar sobre las propiedades de un objeto
const persona = { nombre: "Juan", edad: 30, ciudad: "Madrid" };
for (let clave in persona) {
console.log(`${clave}: ${persona[clave]}`);
}
// Uso de for...of para iterar sobre los elementos de un array
for (let numero of numeros) {
console.log(numero);
}
Cada tipo de bucle en JavaScript tiene su propio conjunto de características y es adecuado para diferentes escenarios de programación, permitiendo a los desarrolladores elegir el más adecuado según la situación.
Funciones
En JavaScript, las funciones son bloques de código diseñados para realizar una tarea específica. Las funciones en JavaScript se pueden declarar y expresar de varias maneras, y es esencial entender las diferencias y usos de cada una.
Declaración de Funciones
La declaración de funciones en JavaScript se realiza utilizando la palabra clave function
, seguida por el nombre de la función, una lista de parámetros entre paréntesis y el bloque de código que se ejecutará cuando la función sea invocada. Aquí hay un ejemplo básico de declaración de función:
javascript
function saludar(nombre) {
console.log("Hola, " + nombre + "!");
}
En este ejemplo, saludar
es el nombre de la función y nombre
es el parámetro que toma. Para llamar a esta función, simplemente se usa su nombre seguido de paréntesis:
javascript
saludar("Carlos"); // Imprime "Hola, Carlos!"
Una característica importante de las declaraciones de funciones es el hoisting. El hoisting permite que las funciones declaradas sean elevadas al inicio de su contexto de ejecución, lo que significa que se pueden invocar antes de que aparezcan en el código:
javascript
decirAdios("Ana");
function decirAdios(nombre) {
console.log("Adiós, " + nombre + "!");
}
Expresión de Funciones
Las expresiones de funciones crean una función dentro de una expresión en lugar de una declaración. Las expresiones de funciones pueden ser anónimas (sin nombre) o nombradas. Se suelen asignar a variables. Aquí hay un ejemplo de expresión de función anónima:
javascript
const sumar = function(a, b) {
return a + b;
};
Y una expresión de función nombrada:
javascript
const multiplicar = function multiplica(a, b) {
return a * b;
};
A diferencia de las declaraciones de funciones, las expresiones de funciones no están sujetas al hoisting. Esto significa que no se pueden llamar antes de su definición en el código:
javascript
console.log(restar(5, 3)); // Error: restar no está definida
const restar = function(a, b) {
return a - b;
};
Funciones Flecha
Introducidas en ECMAScript 6 (ES6), las funciones flecha son una forma más concisa de escribir funciones. Utilizan la sintaxis =>
y no tienen su propio this
, lo cual las hace especialmente útiles en ciertos contextos como callbacks o métodos de array. Aquí hay un ejemplo de una función flecha:
javascript
const dividir = (a, b) => {
return a / b;
};
Para funciones con una sola expresión, se pueden simplificar aún más eliminando las llaves y el return
explícito:
javascript
const multiplicarPorDos = x => x * 2;
Diferencias Clave
- Hoisting: Las declaraciones de funciones se elevan, mientras que las expresiones de funciones no.
- Sintaxis y Concisión: Las funciones flecha proporcionan una sintaxis más corta y no tienen su propio
this
. - Contexto de
this
: Las funciones normales tienen su propio contexto dethis
, mientras que las funciones flecha heredan el contextothis
del entorno donde fueron definidas.
Comprender estas diferencias es crucial para escribir código JavaScript eficiente y claro, aprovechando al máximo cada tipo de función según el contexto y las necesidades del desarrollo.
Manipulación del DOM
Selección de elementos del DOM
La selección de elementos del DOM (Document Object Model) es una de las tareas más comunes en JavaScript, ya que permite interactuar y manipular los elementos de una página web. JavaScript ofrece varios métodos para seleccionar elementos del DOM, cada uno con sus propias características y usos. A continuación, se describen los métodos getElementById
, getElementsByClassName
, querySelector
y querySelectorAll
.
getElementById
El método getElementById
es uno de los más antiguos y comúnmente utilizados para seleccionar elementos del DOM. Este método selecciona un único elemento basado en su atributo id
. Dado que los IDs deben ser únicos dentro de un documento HTML, este método siempre retorna un solo elemento o null
si no se encuentra el elemento con el ID especificado.
Sintaxis:
const elemento = document.getElementById('miId');
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo getElementById</title>
</head>
<body>
<div id="contenido">Hola Mundo</div>
<script>
const elemento = document.getElementById('contenido');
console.log(elemento.textContent); // Imprime "Hola Mundo"
</script>
</body>
</html>
getElementsByClassName
El método getElementsByClassName
selecciona todos los elementos que tienen una clase específica. Devuelve una colección en vivo de elementos (HTMLCollection), lo que significa que si los elementos en el documento cambian, la colección se actualizará automáticamente. Este método puede aceptar múltiples nombres de clase separados por espacios.
Sintaxis:
const elementos = document.getElementsByClassName('miClase');
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo getElementsByClassName</title>
</head>
<body>
<div class="contenido">Hola</div>
<div class="contenido">Mundo</div>
<script>
const elementos = document.getElementsByClassName('contenido');
for (let i = 0; i < elementos.length; i++) {
console.log(elementos[i].textContent);
}
// Imprime "Hola" y "Mundo"
</script>
</body>
</html>
querySelector
El método querySelector
permite seleccionar el primer elemento que coincida con un selector CSS especificado. Este método es muy poderoso ya que permite usar cualquier selector válido de CSS (por ejemplo, selectores de clases, IDs, atributos, pseudo-clases, etc.).
Sintaxis:
const elemento = document.querySelector('.miClase');
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo querySelector</title>
</head>
<body>
<div class="contenido">Hola Mundo</div>
<script>
const elemento = document.querySelector('.contenido');
console.log(elemento.textContent); // Imprime "Hola Mundo"
</script>
</body>
</html>
querySelectorAll
El método querySelectorAll
es similar a querySelector
, pero en lugar de devolver solo el primer elemento que coincide con el selector, devuelve todos los elementos que coinciden con el selector como una NodeList estática. La NodeList no se actualiza automáticamente si los elementos en el documento cambian.
Sintaxis:
const elementos = document.querySelectorAll('.miClase');
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo querySelectorAll</title>
</head>
<body>
<div class="contenido">Hola</div>
<div class="contenido">Mundo</div>
<script>
const elementos = document.querySelectorAll('.contenido');
elementos.forEach(elemento => {
console.log(elemento.textContent);
});
// Imprime "Hola" y "Mundo"
</script>
</body>
</html>
Comparación de Métodos
- getElementById: Ideal para seleccionar un único elemento con un ID único. Es rápido y sencillo.
- getElementsByClassName: Útil para seleccionar múltiples elementos con una clase específica. Devuelve una colección en vivo.
- querySelector: Versátil para seleccionar el primer elemento que coincide con cualquier selector CSS. Es útil cuando se necesita una selección más precisa.
- querySelectorAll: Similar a
querySelector
, pero selecciona todos los elementos que coinciden con el selector. Devuelve una NodeList estática.
Cada uno de estos métodos tiene su uso específico dependiendo del contexto y la necesidad del desarrollo. Conocer sus diferencias y aplicaciones ayuda a escribir un código más eficiente y mantenible.
Manipulación de atributos y contenido
La manipulación del DOM (Document Object Model) en JavaScript permite a los desarrolladores interactuar y modificar la estructura, el estilo y el contenido de una página web de manera dinámica. Entre las tareas más comunes de manipulación del DOM se encuentran la modificación de atributos y contenido de los elementos HTML. A continuación, se describen tres métodos esenciales para realizar estas tareas: innerHTML
, textContent
y setAttribute
.
innerHTML
El método innerHTML
permite acceder o establecer el contenido HTML de un elemento. Este método es muy potente ya que permite insertar HTML estructurado, lo que significa que no solo se puede cambiar el texto, sino también agregar elementos HTML.
Sintaxis:
elemento.innerHTML = 'nuevo contenido HTML';
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo innerHTML</title>
</head>
<body>
<div id="contenido">Contenido inicial</div>
<script>
const elemento = document.getElementById('contenido');
elemento.innerHTML = '<p>Nuevo contenido <strong>HTML</strong></p>';
</script>
</body>
</html>
En este ejemplo, el contenido del div
con el id contenido
se reemplaza por un nuevo párrafo que incluye HTML estructurado.
textContent
El método textContent
permite acceder o establecer el contenido textual de un elemento, eliminando cualquier HTML que pueda contener. Es más seguro que innerHTML
cuando solo se necesita manipular texto, ya que no interpreta HTML y por lo tanto es menos susceptible a ataques de inyección de código.
Sintaxis:
elemento.textContent = 'nuevo contenido de texto';
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo textContent</title>
</head>
<body>
<div id="contenido">Contenido inicial</div>
<script>
const elemento = document.getElementById('contenido');
elemento.textContent = 'Nuevo contenido de texto';
</script>
</body>
</html>
En este ejemplo, el contenido del div
con el id contenido
se reemplaza por un nuevo texto simple. Cualquier HTML que estuviera presente en el contenido inicial se eliminará.
setAttribute
El método setAttribute
permite establecer el valor de un atributo especificado en un elemento. Este método es útil para manipular atributos como href
, src
, class
, id
, y otros atributos personalizados.
Sintaxis:
elemento.setAttribute('nombreAtributo', 'valorAtributo');
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo setAttribute</title>
</head>
<body>
<a id="miEnlace" href="https://ejemplo.com">Visita nuestro sitio</a>
<script>
const enlace = document.getElementById('miEnlace');
enlace.setAttribute('href', 'https://nuevodestino.com');
enlace.setAttribute('target', '_blank');
</script>
</body>
</html>
En este ejemplo, el enlace con el id miEnlace
cambia su atributo href
para apuntar a un nuevo destino y agrega un atributo target
para abrir el enlace en una nueva pestaña.
Comparación y Usos
- innerHTML: Utilizado para establecer o recuperar contenido HTML estructurado dentro de un elemento. Es potente pero debe usarse con cuidado debido a los riesgos de inyección de código si se manipulan entradas de usuario sin validación adecuada.
- textContent: Ideal para establecer o recuperar solo el contenido textual de un elemento. Es más seguro que
innerHTML
cuando no se necesita manipular HTML, ya que elimina cualquier HTML presente en el contenido. - setAttribute: Utilizado para establecer o cambiar el valor de un atributo específico de un elemento. Es esencial para manipular atributos dinámicamente, como cambiar enlaces, imágenes, clases, etc.
Conclusión
Manipular atributos y contenido en el DOM es una parte fundamental del desarrollo web dinámico. Con innerHTML
, textContent
y setAttribute
, los desarrolladores tienen herramientas poderosas y flexibles para actualizar y gestionar la estructura y el contenido de sus páginas web. Comprender las diferencias y aplicaciones de estos métodos ayuda a escribir código más seguro, eficiente y mantenible.
Eventos
La manipulación del DOM (Document Object Model) en JavaScript no solo implica cambiar el contenido y los atributos de los elementos, sino también manejar eventos. Los eventos permiten a los desarrolladores crear interacciones dinámicas y responder a las acciones de los usuarios, como clics, envíos de formularios, desplazamientos y mucho más. El método addEventListener
es fundamental para la gestión de eventos en JavaScript, y conocer los eventos más comunes como click
y submit
es esencial para crear experiencias de usuario interactivas.
addEventListener
El método addEventListener
se utiliza para registrar un evento a un objeto en el DOM. Este método permite agregar múltiples eventos del mismo tipo a un elemento sin sobrescribir los controladores existentes, lo que proporciona una forma flexible y robusta de manejar eventos.
Sintaxis:
elemento.addEventListener('evento', función, usoCaptura);
evento
: Una cadena que especifica el nombre del evento a escuchar, comoclick
,submit
,mouseover
, etc.función
: La función que se ejecutará cuando el evento se dispare.usoCaptura
(opcional): Un booleano que indica si el evento debe ser capturado en la fase de captura (true
) o en la fase de burbuja (false
). Por defecto esfalse
.
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo addEventListener</title>
</head>
<body>
<button id="miBoton">Haz clic aquí</button>
<script>
const boton = document.getElementById('miBoton');
boton.addEventListener('click', function() {
alert('¡Botón clickeado!');
});
</script>
</body>
</html>
En este ejemplo, se agrega un evento click
al botón con el id miBoton
. Cuando el usuario hace clic en el botón, se ejecuta la función que muestra una alerta.
Eventos Comunes
Click
El evento click
se dispara cuando un elemento es clickeado por el usuario. Es uno de los eventos más utilizados para capturar interacciones del usuario.
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo evento click</title>
</head>
<body>
<div id="miDiv">Haz clic en este div</div>
<script>
const div = document.getElementById('miDiv');
div.addEventListener('click', function() {
div.style.backgroundColor = 'yellow';
});
</script>
</body>
</html>
En este ejemplo, el evento click
cambia el color de fondo del div
a amarillo cuando se hace clic en él.
Submit
El evento submit
se dispara cuando un formulario es enviado. Este evento es útil para validar datos antes de que el formulario se envíe al servidor.
Ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo evento submit</title>
</head>
<body>
<form id="miFormulario">
<input type="text" name="nombre" placeholder="Nombre">
<button type="submit">Enviar</button>
</form>
<script>
const formulario = document.getElementById('miFormulario');
formulario.addEventListener('submit', function(evento) {
evento.preventDefault(); // Evita que el formulario se envíe
alert('Formulario enviado');
});
</script>
</body>
</html>
En este ejemplo, el evento submit
se utiliza para mostrar una alerta cuando se envía el formulario, y preventDefault
evita que el formulario se envíe realmente, permitiendo la validación o el procesamiento adicional antes del envío.
Otros Eventos Comunes
- mouseover: Se dispara cuando el cursor del ratón se mueve sobre un elemento.
- mouseout: Se dispara cuando el cursor del ratón se mueve fuera de un elemento.
- keydown: Se dispara cuando se presiona una tecla.
- keyup: Se dispara cuando se suelta una tecla.
- input: Se dispara cuando el valor de un elemento
<input>
cambia.
Conclusión
El manejo de eventos es una parte crucial de la manipulación del DOM en JavaScript. Con el método addEventListener
, los desarrolladores pueden registrar múltiples controladores de eventos en un solo elemento, lo que proporciona una gran flexibilidad y control sobre la interactividad de una página web. Conocer y utilizar eventos comunes como click
y submit
permite crear aplicaciones web dinámicas y receptivas que mejoran significativamente la experiencia del usuario.
¿Quieres aprender todo sobre el DOM? En https://lenguajejs.com/dom/ podrás hacerlo.
Objetos y programación orientada a objetos (OOP)
La programación orientada a objetos (OOP) en JavaScript es un paradigma que permite organizar y estructurar el código en torno a objetos, facilitando la reutilización y mantenimiento del código. A continuación, se detalla cómo crear y manipular objetos, así como utilizar conceptos avanzados como herencia y clases introducidas en ES6.
1. Creación de objetos
Objetos literales
La forma más simple y directa de crear un objeto en JavaScript es utilizando la notación de objeto literal. Un objeto literal se define con llaves {}
y contiene pares clave-valor separados por comas.
Ejemplo:
const persona = {
nombre: 'Juan',
edad: 30,
saludar: function() {
console.log('Hola, soy ' + this.nombre);
}
};
persona.saludar(); // Imprime "Hola, soy Juan"
Constructores
Para crear múltiples instancias de objetos con las mismas propiedades y métodos, se puede utilizar una función constructora. Las funciones constructoras actúan como plantillas para crear objetos.
Ejemplo:
function Persona(nombre, edad) {
this.nombre = nombre;
this.edad = edad;
this.saludar = function() {
console.log('Hola, soy ' + this.nombre);
};
}
const juan = new Persona('Juan', 30);
const maria = new Persona('María', 25);
juan.saludar(); // Imprime "Hola, soy Juan"
maria.saludar(); // Imprime "Hola, soy María"
2. Propiedades y métodos
En JavaScript, las propiedades y métodos se pueden agregar y acceder dinámicamente en los objetos.
Acceso a propiedades y métodos:
const coche = {
marca: 'Toyota',
modelo: 'Corolla',
arrancar: function() {
console.log('El coche está arrancado');
}
};
console.log(coche.marca); // Imprime "Toyota"
coche.arrancar(); // Imprime "El coche está arrancado"
// Agregar propiedades y métodos
coche.año = 2020;
coche.detener = function() {
console.log('El coche está detenido');
};
console.log(coche.año); // Imprime "2020"
coche.detener(); // Imprime "El coche está detenido"
3. Herencia y prototipos
JavaScript utiliza el sistema de prototipos para implementar la herencia. Cada objeto tiene una propiedad interna llamada [[Prototype]]
que puede ser accedida mediante __proto__
en los navegadores modernos o Object.getPrototypeOf
.
Ejemplo de herencia prototipal:
function Animal(nombre) {
this.nombre = nombre;
}
Animal.prototype.hablar = function() {
console.log(this.nombre + ' hace un sonido.');
};
function Perro(nombre, raza) {
Animal.call(this, nombre); // Llama al constructor de Animal
this.raza = raza;
}
Perro.prototype = Object.create(Animal.prototype);
Perro.prototype.constructor = Perro;
Perro.prototype.hablar = function() {
console.log(this.nombre + ' ladra.');
};
const rex = new Perro('Rex', 'Labrador');
rex.hablar(); // Imprime "Rex ladra."
4. Clases (introducción en ES6)
Las clases en JavaScript, introducidas en ES6, proporcionan una sintaxis más clara y concisa para trabajar con objetos y herencia, aunque en su esencia son un azúcar sintáctico sobre el sistema de prototipos.
Declaración de clases
Ejemplo:
class Persona {
constructor(nombre, edad) {
this.nombre = nombre;
this.edad = edad;
}
saludar() {
console.log(`Hola, soy ${this.nombre}`);
}
}
const juan = new Persona('Juan', 30);
juan.saludar(); // Imprime "Hola, soy Juan"
Métodos y constructores
El constructor es un método especial para crear e inicializar un objeto creado con una clase. Los métodos se definen dentro de la clase sin necesidad de la palabra clave function
.
Ejemplo:
class Coche {
constructor(marca, modelo) {
this.marca = marca;
this.modelo = modelo;
}
arrancar() {
console.log(`${this.marca} ${this.modelo} está arrancado.`);
}
detener() {
console.log(`${this.marca} ${this.modelo} está detenido.`);
}
}
const miCoche = new Coche('Toyota', 'Corolla');
miCoche.arrancar(); // Imprime "Toyota Corolla está arrancado."
miCoche.detener(); // Imprime "Toyota Corolla está detenido."
Herencia de clases
Las clases en ES6 también soportan la herencia a través de la palabra clave extends
. La palabra clave super
se utiliza para llamar al constructor y métodos del padre.
Ejemplo:
class Animal {
constructor(nombre) {
this.nombre = nombre;
}
hablar() {
console.log(`${this.nombre} hace un sonido.`);
}
}
class Perro extends Animal {
constructor(nombre, raza) {
super(nombre); // Llama al constructor de Animal
this.raza = raza;
}
hablar() {
console.log(`${this.nombre} ladra.`);
}
}
const rex = new Perro('Rex', 'Labrador');
rex.hablar(); // Imprime "Rex ladra."
Conclusión
La programación orientada a objetos en JavaScript proporciona una estructura clara para crear, organizar y gestionar el código mediante el uso de objetos, prototipos y clases. Entender cómo crear y manipular objetos, definir propiedades y métodos, y utilizar la herencia es fundamental para desarrollar aplicaciones web robustas y mantenibles. Con la introducción de clases en ES6, la sintaxis se ha vuelto más intuitiva y accesible, facilitando el trabajo con la orientación a objetos en JavaScript.
Asincronía en JavaScript
7.1. Callbacks
7.2. Promesas
7.3. Async/Await
7.4. Manejo de errores asincrónicos
Aprende a controlar la asincronía de Javascript https://lenguajejs.com/asincronia/
Trabajando con APIs
8.1. Fetch API
8.2. XMLHttpRequest
8.3. Consumo de APIs RESTful
8.4. Manejo de JSON
Herramientas y frameworks modernos
9.1. Node.js
– Introducción y configuración
– Módulos y npm
9.2. NPM y gestión de paquetes
9.3. Webpack y Babel
– Configuración básica
– Compilación y transpilación
9.4. Frameworks populares
– React.js
– Vue.js
– Angular
Buenas prácticas y patrones de diseño
10.1. Código limpio y legible
10.2. Modularización y reutilización de código
10.3. Patrones de diseño comunes
– Singleton
– Observer
– Factory
10.4. Testing en JavaScript
– Unit tests
– Herramientas de testing (Jest, Mocha, etc.)
Proyectos y práctica
11.1. Pequeños proyectos para principiantes
– Calculadora
– To-do list
– Juego del ahorcado
11.2. Proyectos intermedios
– Aplicación de clima usando una API externa
– Blog con autenticación básica
11.3. Proyectos avanzados
– SPA (Single Page Application) con un framework
– Aplicación de comercio electrónico
Recursos adicionales
12.1. Documentación oficial
– MDN Web Docs
12.2. Cursos en línea
– Udemy
– Coursera
– FreeCodeCamp
– Aprende a crear animaciones con CSS/JS https://lenguajecss.com/animaciones/
12.3. Comunidades y foros
– Stack Overflow
– GitHub
– Reddit (r/learnjavascript)