TechLead

JavaScript Moderno (ES6+)

Let/const, funciones flecha, destructuring

JavaScript Moderno

ES6 (ECMAScript 2015) y versiones posteriores introdujeron muchas caracteristicas que hacen JavaScript mas potente y agradable de escribir. Aqui estan las mas importantes.

Template Literals

const nombre = "Ana";
const edad = 25;

// Interpolacion de strings
const mensaje = `Hola, ${nombre}! Tienes ${edad} anos.`;

// Strings multilinea
const html = `
  <div class="tarjeta">
    <h2>${nombre}</h2>
    <p>Edad: ${edad}</p>
  </div>
`;

// Expresiones en templates
const precio = 100;
const iva = `Total: $${(precio * 1.21).toFixed(2)}`;

Destructuring

// Arrays
const [primero, segundo, ...resto] = [1, 2, 3, 4, 5];
const [a, , c] = [1, 2, 3]; // Saltar elementos

// Objetos
const { nombre, edad } = { nombre: "Ana", edad: 25 };
const { nombre: n, edad: e } = persona; // Renombrar
const { direccion: { ciudad } } = persona; // Anidado

// En parametros de funcion
function saludar({ nombre, edad = 0 }) {
  return `${nombre} tiene ${edad} anos`;
}

// Intercambiar variables
let x = 1, y = 2;
[x, y] = [y, x];

Spread Operator

// Arrays
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]
const copia = [...arr1];

// Objetos
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // { a: 1, b: 2, c: 3 }

// Argumentos de funcion
const numeros = [1, 2, 3];
console.log(Math.max(...numeros)); // 3

Rest Parameters

// Recoger argumentos restantes
function sumar(...numeros) {
  return numeros.reduce((a, b) => a + b, 0);
}
sumar(1, 2, 3, 4); // 10

// Combinar con parametros normales
function log(primero, ...resto) {
  console.log(primero); // "a"
  console.log(resto);   // ["b", "c"]
}
log("a", "b", "c");

Shorthand Properties y Methods

const nombre = "Ana";
const edad = 25;

// Shorthand properties
const persona = { nombre, edad };
// Equivalente a: { nombre: nombre, edad: edad }

// Shorthand methods
const calculadora = {
  sumar(a, b) {
    return a + b;
  },
  restar(a, b) {
    return a - b;
  }
};
// En vez de: sumar: function(a, b) { ... }

Optional Chaining y Nullish Coalescing

const usuario = {
  nombre: "Ana",
  direccion: {
    ciudad: "Madrid"
  }
};

// Optional chaining (?.)
console.log(usuario.direccion?.ciudad);  // "Madrid"
console.log(usuario.trabajo?.empresa);   // undefined (sin error)
console.log(usuario.metodo?.());         // undefined si no existe

// Nullish coalescing (??)
const valor = null ?? "por defecto";     // "por defecto"
const cero = 0 ?? "por defecto";         // 0 (solo null/undefined)
const cadenaVacia = "" ?? "por defecto"; // "" (solo null/undefined)

// Combinar ambos
const ciudad = usuario.direccion?.ciudad ?? "Desconocida";

Otras Caracteristicas ES6+

// Symbol - valores unicos
const id = Symbol("id");

// Map - pares clave-valor (cualquier tipo de clave)
const mapa = new Map();
mapa.set("clave", "valor");
mapa.set(123, "numero como clave");

// Set - valores unicos
const conjunto = new Set([1, 2, 2, 3]); // {1, 2, 3}

// for...of - iterar sobre iterables
for (const valor of [1, 2, 3]) {
  console.log(valor);
}

// Array.includes
[1, 2, 3].includes(2); // true

// Object.entries/values/keys
Object.entries({ a: 1, b: 2 }); // [["a", 1], ["b", 2]]

// Exponenciacion
2 ** 3; // 8

// Array.flat y flatMap
[[1, 2], [3, 4]].flat(); // [1, 2, 3, 4]