Contenido del curso
Primeros Pasos
- 5

¡Hola Mundo!
06:13 min - 6

Anatomía de una variable
09:23 min - 7

Tipos de datos: Mutabilidad e inmutabilidad
10:55 min - 8

Paso por valor
11:06 min - 9

Paso por referencia
07:00 min - 10

Creación de strings
11:33 min - 11

Concatenación de strings
08:31 min - 12

Manipulación de strings
12:13 min - 13

Tipo de dato primitivo: number
09:30 min - 14

Conversión a Booleanos
05:08 min - 15

Tipos de datos primitivos: null, undefined, symbol y bigint
07:28 min - 16

Conversión de tipos: Type Casting y Coercion
04:38 min - 17

Conversión de tipos explícita e implícita
12:20 min - 18

Proyecto: Crea un perfil para redes sociales con JavaScript
07:23 min
Funciones y This
- 19

Anatomía de una función
11:39 min - 20

Preguntas a Desarrolladores Senior: ¿Por qué aprender Desarrollo Web?
02:11 min - 21

Funciones vs Métodos
10:01 min - 22

Funciones puras e impuras
11:22 min - 23

Identificador this
11:38 min - 24

Métodos bind, call y apply
10:09 min - 25

Funciones flecha y enlace léxico
10:31 min - 26

Implicaciones de duplicar código
03:19 min - 27

Funciones constructoras
10:41 min - 28

10 Tipos de funciones
01:39 min - 29

Objeto window y modo estricto
07:37 min - 30

Tipos de binding
01:11 min - 31

Expresiones vs Sentencias
04:02 min - 32

Proyecto: Crea biografías de personajes con JavaScript
12:51 min
Lógica y ciclos
- 33

Operadores de comparación
06:12 min - 34

Operadores lógicos
04:33 min - 35

Ejecución condicional: if
07:45 min - 36

Proyecto: Adivina el número
09:36 min - 37

Ejecución condicional: ternario
05:24 min - 38

Ejecución condicional: switch
12:08 min - 39

Loop: for
07:31 min - 40

Loop: forEach
03:57 min - 41

Loop: for of
04:26 min - 42

Loop: for in
07:38 min - 43

Loop: while
03:56 min - 44

Loop: do while
03:13 min - 45

Proyecto: Juego adivina la palabra
15:56 min
Fundamentos de arrays y modificación
- 46

Introducción a Arrays
09:09 min - 47

Mutabilidad e inmutabiliad de Arrays
07:56 min - 48

Modificación básica del final con push(), pop()
04:33 min - 49

Ejercicio: Stack de libros
16:03 min - 50

Modificación del principio con shift(), unshift()
10:21 min - 51

Modificación avanzada con splice(), reverse(), sort(), fill()
16:37 min - 52

Proyecto: Juego de cartas
15:37 min - 53

Preguntas a Desarrolladores Senior: Estrategias y métodos de estudio
01:10 min
Iteración de Arrays
- 54

Iteración con map() y forEach()
12:53 min - 55

Filtrado y reducción con filter() y reduce()
11:34 min - 56

Ejercicio: Calificación promedio aprobatoria
05:27 min - 57

Búsqueda de elementos con find() y findIndex()
03:52 min - 58

Ejercicio: Encuentra al ganador de una rifa
11:21 min - 59

Proyecto: Análisis de transacciones
10:55 min - 60

Proyecto: Análisis de transacciones parte 2
08:01 min
Métodos específicos y Operaciones
- 61

Unir y entrelazar con concat(), spread operator y join()
12:05 min - 62

Verificación y evaluación con every() y some()
05:15 min - 63

Métodos de búsqueda con includes(), indexOf() y lastIndexOf()
07:05 min - 64

Ejercicio: Encontrando los índices
11:09 min - 65

Crear copias con slice()
05:28 min - 66

Spread operator: casos de uso
07:11 min
Arrays multidimencionales
Clases y Objetos
- 71

Anatomia de un Objeto
06:48 min - 72

Trabajando con objetos
12:52 min - 73

Función constructora
14:31 min - 74

¿Qué es una clase?
06:17 min - 75

Prototipos y herencias
02:15 min - 76

Herencia en la práctica
15:38 min - 77

Prototipos en la práctica
10:42 min - 78

this en JavaScript
05:36 min - 79

Proyecto: Crea una red social
Viendo ahora - 80

Proyecto: Crea una red social parte 2
09:00 min
Proyecto: Crea una red social
Resumen
Construir un sistema de autenticación básico es uno de los ejercicios más formativos cuando aprendes programación. A través de un reto práctico, se muestra cómo recorrer una base de datos simulada, validar credenciales y mostrar un timeline personalizado, todo utilizando JavaScript desde el navegador.
¿Cómo capturar el usuario y la contraseña del navegador?
El primer paso del reto consiste en permitir que el usuario ingrese sus credenciales. Para esto se utiliza la función prompt(), que despliega un cuadro de diálogo en el navegador y devuelve un string con lo que el usuario escriba [0:52].
javascript const username = prompt("¿Cuál es tu usuario?"); const password = prompt("¿Cuál es tu contraseña?");
- Se declaran dos constantes con
constporque estos valores no se reasignan. - Cada
prompt()captura un dato distinto: nombre de usuario y contraseña. - Los valores quedan almacenados en las variables
usernameypassword, listos para usarse en la validación.
Con estas dos líneas, el primer requerimiento queda resuelto: el sistema ya tiene una forma de recibir información del usuario.
¿Cómo validar credenciales contra una base de datos simulada?
La base de datos en este ejercicio es simplemente un arreglo de objetos (array of objects), donde cada objeto contiene un username y un password. Esta estructura es una simplificación de cómo funcionaría una base de datos real en una red social [0:24].
Para recorrer ese arreglo y comparar cada registro con los datos ingresados, se construye una función llamada usuarioExistente que recibe dos parámetros [2:44].
javascript function usuarioExistente(username, password) { for (let i = 0; i < userDatabase.length; i++) { if (userDatabase[i].username === username && userDatabase[i].password === password) { console.log("es correcto"); break; } else { console.log("no es correcto"); } } }
usuarioExistente(username, password);
¿Qué hace el ciclo for en la validación?
El for itera sobre cada elemento del arreglo userDatabase [3:08]. En cada vuelta, la variable i representa la posición actual del objeto que se está evaluando. La condición i < userDatabase.length garantiza que el ciclo se detenga cuando ya no haya más elementos por revisar.
¿Por qué se usa la igualdad estricta?
Dentro del if, se compara con el operador de igualdad estricta (===). Este operador verifica tanto el valor como el tipo de dato, lo cual es más seguro que usar ==. Se evalúan dos condiciones unidas con && (and lógico) [4:30]:
- Que el
usernamedel objeto actual sea idéntico al ingresado. - Que el
passworddel objeto actual sea idéntico al ingresado.
Ambas condiciones deben cumplirse para considerar que las credenciales son válidas.
¿Para qué sirve el break dentro del ciclo?
Sin el break, el ciclo sigue ejecutándose aunque ya haya encontrado una coincidencia. Esto genera validaciones innecesarias sobre los objetos restantes [6:22]. Al agregar break, el loop se interrumpe inmediatamente después de encontrar el registro correcto, evitando recorridos adicionales y optimizando la ejecución.
¿Qué sucede después de la validación?
El tercer y cuarto requerimiento definen el comportamiento según el resultado:
- Credenciales correctas: el sistema muestra un mensaje de bienvenida y presenta el timeline del usuario. Este timeline es otro arreglo de objetos que contiene usernames de personas seguidas y sus mensajes publicados [0:30].
- Credenciales incorrectas: se muestra un mensaje de error indicando que el usuario o la contraseña no existen, y no se despliega ningún contenido adicional [1:15].
Esta lógica condicional con if...else es el patrón fundamental de cualquier sistema de autenticación, desde aplicaciones sencillas hasta plataformas complejas.
El reto puede extenderse agregando atributos como la hora de publicación o respuestas a mensajes dentro del timeline. Si lograste resolverlo por tu cuenta o le añadiste funcionalidades extra, compártelo en los comentarios.