Notas del Curso Completo de JavaScript para Principiantes (freeCodeCamp.org)

Jul 4, 2024

Curso Completo de JavaScript para Principiantes

Beau Carnes, freeCodeCamp.org

Introducción

  • Curso: JavaScript para Principiantes
  • Propósito: Aprender los conceptos básicos del lenguaje JavaScript
  • Incluye problemas interactivos en el curriculum de freeCodeCamp.org
  • Después del curso: proyectos de JavaScript
  • Recursos adicionales: tutoriales de proyectos en la descripción

Instalación de JavaScript

Opcional (ya está en todos los navegadores web)

  • Editores de código recomendados:
    • Sublime Text
    • Visual Studio Code
    • Atom
  • Opciones para escribir JS:
    • Dentro de etiquetas <script> en archivos HTML
    • Editor en freeCodeCamp.org
    • CodePen (Create Pen)
    • Scrimba.com

Comentarios en JavaScript

  • Comentarios: líneas ignoradas por JavaScript
  • Comentarios de una sola línea: //
  • Comentarios multi-línea: /* */
  • Utilizados para tomar notas o describir funciones

Tipos de Datos y Variables

Tipos de Datos

  • Cadena (String): cualquier texto
  • Número (Number): cualquier número
  • Booleano (Boolean): true o false
  • Indefinido (Undefined): valor no definido
  • Nulo (Null): valor nulo
  • Símbolo (Symbol): valor único e inmutable, más sobre estos después
  • Objeto (Object): almacenar pares clave-valor

Variables

  • Almacenan y manipulan datos de manera dinámica
  • Declarar variables con var, let, o const
    • var: alcance global o de función
    • let: alcance de bloque
    • const: no se puede re-asignar, debe inicializarse

Asignación y Declaraciones

  • Declaración de variable: var a;
  • Asignación de variable: a = 7;
  • Decl. y Asignación juntas: var b = 2;

Tipos de Asignaciones

  • Inicialización de variable con operador de asignación: var a = 9;
  • Variables no inicializadas tienen valor undefined, deben ser asignadas para evitar errores
  • Sensibilidad a mayúsculas: nombres y funciones son sensibles a mayúsculas
  • Buena práctica usar camelCase: comienza con minúscula, nuevas palabras en mayúscula myVariable

Operaciones Matemáticas

  • Suma: 10 + 10
  • Resta: 45 - 33
  • Multiplicación: 8 * 10
  • División: 66 / 33
  • Incremento: myVar++
  • Decremento: myVar--
  • Decimales: 5.7
  • Multiplicación de decimales: 2.5 * 0.2
  • División de decimales: 4.4 / 2.2
  • Resto: 11 % 3 (útil para determinar par/impar)

Asignación Compuesta

  • Adición aumentada: a += 12
  • Sustracción aumentada: a -= 6
  • Multiplicación aumentada: a *= 5
  • División aumentada: a /= 3

Manipulación de cadenas de texto (Strings)

Declaración y concatenación

  • Declarar variables de string: var myName = "Beau";
  • Concatenación de strings con operador +
  • Concatenar con +=: myStr += " more text";
  • Construcción de strings con variables: "My name is " + myName;
  • Anexar variables a strings: += someAdjective;

Propiedades y notación

  • Longitud de string: myName.length;
  • Notación de corchetes: acceder a caracteres [index]
  • Inmutabilidad de strings: no se pueden cambiar caracteres directamente, solo reasignar
  • Especificación de caracteres finales y específicos: str[str.length - 1]
  • Secuencias de escape: \, \n, \t, etc.

Manipulación y uso

  • Crear matrices (arrays): var myArray = ["value", 2];
  • Matrices anidadas: [["value", 2], ["another"]]
  • Acceso a datos de matriz: myArray[0]
  • Modificar datos de matriz: myArray[0] = 3;
  • Agregar con .push(): myArray.push(4);
  • Eliminar último item con .pop(): var lastItem = myArray.pop();
  • Eliminar primer item con .shift(): var firstItem = myArray.shift();
  • Agregar primer item con .unshift(): myArray.unshift(3);
  • Listado de compras: matrices anidadas para representar listas

Funciones

Definición y uso

  • Crear función: function reusableFunction() {...}
  • Llamar función: reusableFunction();
  • Parámetros de funciones: functionWithArgs(a, b) {...} y functionWithArgs(10, 5);
  • Ambito de variables:
    • Global: fuera de funciones, accesible desde cualquier parte
    • Local: dentro de funciones, accesible solo allí
    • Precedencia local vs global: las locales tienen prioridad en caso de duplicados

Uso avanzado

  • Retorno de valor: function returnVar() { return varName; }
  • Valor undefined retornado de funciones: si no existe return, retorna undefined
  • Asignación con valor retornado: var myVar = myFunction();

Ejemplos prácticos

  • Cue (Queue) en ciencias de la computación: operaciones sobre datos en filas
  • Card counting function (Blackjack): contar cartas

Condicionales y operadores

Booleanos y Lógica

  • Valores booleanos: true, false
  • if statement: if (condition) {...}, if (val == 12) {...}
  • Operador de igualdad estricta: === no convierte tipos, ==
  • Operadores de desigualdad y estricta: != y !==
  • Operadores >, >=, <, <=: comparación numérica
  • Operadores lógicos &&, ||: if (a && b), if (a || b)
  • else y else if: manejar múltiples condiciones
  • Anidar declaraciones condicionales: usar múltiples else if en orden lógico
  • Switch statements: switch (val) { case 1:...}, más limpieza que múltiples else if
  • Declaración default: usar cuando nada más coincide: default: ...
  • Uso de múltiples opciones idénticas: omitimos break: case 1: case 2: ...

Bucles e iteración

Tipos de bucles

  • while loop: while (i < 5) {...}
  • for loop: for (var i = 0; i < 5; i++) {...}
  • do...while loop: ejecuta al menos una vez: do {...} while (i < 5);

Operaciones sobre matrices

  • Iterar sobre matrices: for (var i = 0; i < array.length; i++) {...}
  • Bucles anidados: manejar matrices multidimensionales: for (var i = 0; ...){ for (var j = 0; ...){...}}

Objetos

Fundamentos

  • Crear objetos: { key: "value", ...}
  • Acceso a propiedades:
    • Notación de puntos: object.key
    • Notación de corchetes: object["key"]
  • Acceso a propiedades con variables: var prop = "key"; object[prop]
  • Actualizar propiedades: object.key = "newValue"
  • Agregar nuevas propiedades: object.newKey = "value"
  • Eliminar propiedades: delete object.key
  • Uso como búsqueda (lookup): buscar valores asociados a etiquetas
  • Verificar propiedades con .hasOwnProperty(): if (object.hasOwnProperty(prop)) {...}
  • Manipulación de objetos complejos: objetos dentro de objetos, arrays de objetos
  • Acceso a objetos anidados con notación combinada: obj.innerObj["key"]
  • Manejo de matrices anidadas: array[i][j]

Matemáticas y Números Aleatorios

  • Generar fracciones aleatorias: Math.random();
  • Números enteros aleatorios: Math.floor(Math.random() * 20);
  • Números dentro de un rango: Math.floor(Math.random() * (max - min + 1)) + min;
  • parseInt para convertir strings a números: parseInt("56");
  • parseInt con radix: especificar base numérica: parseInt("1101", 2);

Operador Condicional (Ternario)

  • Simplificar if...else: condition ? exprIfTrue : exprIfFalse;
  • Condicionales múltiples: a ? b : c ? d : e

ES6 y Características Avanzadas

Variables Modernas: let y const

  • Uso de let para bloquear el alcance: no declararlas dos veces
  • let comparado con var: alcance limitado al bloque
  • const para constantes: no se pueden re-asignar
  • Mutar arrays con const: se pueden cambiar los elementos
  • Prevenir mutaciones de objetos: Object.freeze(obj)

Funciones Flecha (Arrow Functions)

  • Sintaxis concisa: (params) => {...}
  • Con argumentos: (a, b) => a + b
  • Parámetros por defecto: (param = defaultValue) => {...}
  • Operador resto (...): agrupar parámetros: (...args) => {...}
  • Operador spread (...): expandir arrays, copiar arrays

Desestructuración

  • Asignación desestructurante en objetos: extraer propiedades: const {a, b} = obj;
  • Objetos anidados: extraer propiedades profundas: const {a, b: {c}} = obj;
  • Asignación desestructurante en arrays: extract elements: const [x, y] = arr;
  • Resto (...) al desestructurar: agrupar restantes: [a, b, ...rest] = arr;

Clases y Métodos

  • Declarar con class: class Name {...}
  • Constructor: constructor(param) { this.prop = param; }
  • Getters y Setters: manejar acceso a propiedades privadas get prop() y set prop(value)
  • Exportar e Importar Módulos:
    • export: exportar funciones/variables
    • import desde otros archivos: import { func } from 'file';
    • export default: exportación por defecto
    • Importar todo el contenido: import * as obj from 'file';

Literales de Plantillas (Template Literals)

  • Crear cadenas completas con backticks: \Hola ${nombre}\\
  • Ventajas:
    • Multilínea
    • Insertar comillas sin escaparlas
    • Incluir variables directamente

Despedida

  • No olvidar suscribirse a freeCodeCamp.org
  • Usar código para el bien

¡Listo para comenzar a aplicar JavaScript en tus proyectos! 🚀