JavaScript Cheatsheet
Referencia rapida de JavaScript: variables, operadores, metodos de string, array y objeto, sintaxis ES6+, DOM, eventos, asincronia, almacenamiento y mas. Imprimi esta pagina y tenela a mano.
Variables y Tipos de Datos
| Concepto | Descripción | Ejemplo |
|---|---|---|
| const | Constante (no se puede reasignar). Usar por defecto | const PI = 3.14; |
| let | Variable con alcance de bloque. Usar solo si muta | let contador = 0; |
| var | Variable con alcance de funcion. EVITAR en codigo nuevo | var viejo = "no usar"; |
| String | Cadena de texto. Se crea con comillas simples, dobles o backticks | const s = "hola"; |
| Number | Numeros enteros y decimales (IEEE 754). Solo un tipo numerico | 42, 3.14, NaN, Infinity |
| BigInt | Enteros arbitrariamente grandes. Se crea con n sufijo | 9007199254740991n |
| Boolean | Valor logico: true o false | const activo = true; |
| null | Valor vacio intencional (asignado manualmente) | let dato = null; |
| undefined | Variable declarada sin valor (valor por defecto) | let x; // x es undefined |
| Symbol | Valor unico e inmutable (identificadores) | const id = Symbol("desc"); |
| Object | Coleccion de pares clave-valor. Base de todo en JS | { nombre: "Ana" } |
| Array | Lista ordenada (es un tipo especial de Object) | [1, 2, 3] |
| typeof | Operador para consultar el tipo de un valor | typeof 42 // "number" |
| Array.isArray() | Forma correcta de verificar si es un array | Array.isArray([1]) // true |
| instanceof | Verifica si un objeto es instancia de una clase | [] instanceof Array // true |
Operadores
| Operador | Descripción | Ejemplo |
|---|---|---|
| + - * / % ** | Aritmeticos: suma, resta, mult, div, modulo, potencia | 2 ** 3 // 8 |
| = += -= *= /= | Asignacion y asignacion compuesta | x += 5; // x = x + 5 |
| ++ -- | Incremento / decremento (prefijo o sufijo) | i++; ++i; |
| === !== | Igualdad estricta (tipo + valor). SIEMPRE usar estos | 1 === "1" // false |
| == != | Igualdad debil (convierte tipos). EVITAR | 1 == "1" // true |
| < > <= >= | Comparacion (devuelven boolean) | 5 > 3 // true |
| && || ! | Logicos: AND, OR, NOT | !true // false |
| ?? | Nullish coalescing: devuelve el derecho si el izquierdo es null/undefined | null ?? "default" // "default" |
| || | OR logico: devuelve el primero truthy | "" || "hola" // "hola" |
| ?. | Optional chaining: accede seguro sin error si es null/undefined | user?.address?.city |
| ?: (ternario) | Operador condicional (if/else en una linea) | edad >= 18 ? "mayor" : "menor" |
| typeof | Devuelve el tipo del valor como string | typeof null // "object" (bug historico) |
Metodos de String
| Metodo | Descripción | Ejemplo |
|---|---|---|
| .length | Cantidad de caracteres (propiedad, no metodo) | "hola".length // 4 |
| .slice(start, end?) | Extrae parte del string (end exclusivo, negativos cuentan desde atras) | "hola mundo".slice(0, 4) // "hola" |
| .substring(start, end?) | Similar a slice pero no acepta negativos | "hola".substring(1) // "ola" |
| .replace(search, repl) | Reemplaza la primera ocurrencia (usa regex para global) | "aab".replace("a", "x") // "xab" |
| .replaceAll(search, repl) | Reemplaza todas las ocurrencias | "aab".replaceAll("a", "x") // "xxb" |
| .toUpperCase() | Convierte a mayusculas | "hola".toUpperCase() // "HOLA" |
| .toLowerCase() | Convierte a minusculas | "HOLA".toLowerCase() // "hola" |
| .trim() | Elimina espacios en blanco al inicio y final | " hola ".trim() // "hola" |
| .trimStart() / .trimEnd() | Elimina espacios solo al inicio / solo al final | " hola ".trimStart() // "hola " |
| .includes(str) | Verifica si contiene la subcadena (true/false) | "hola".includes("ol") // true |
| .startsWith(str) | Verifica si empieza con la subcadena | "hola".startsWith("ho") // true |
| .endsWith(str) | Verifica si termina con la subcadena | "hola".endsWith("la") // true |
| .indexOf(str) | Posicion de la primera ocurrencia (-1 si no existe) | "hola".indexOf("l") // 2 |
| .split(sep) | Divide el string en un array | "a,b,c".split(",") // ["a","b","c"] |
| .repeat(n) | Repite el string n veces | "ab".repeat(3) // "ababab" |
| .padStart(len, str) | Rellena al inicio hasta alcanzar len caracteres | "5".padStart(3, "0") // "005" |
| .padEnd(len, str) | Rellena al final hasta alcanzar len caracteres | "hi".padEnd(5, ".") // "hi..." |
| .charAt(idx) | Caracter en la posicion indicada | "hola".charAt(1) // "o" |
| .charCodeAt(idx) | Codigo Unicode del caracter en la posicion | "A".charCodeAt(0) // 65 |
| .match(regex) | Busca coincidencias con una expresion regular | "hola123".match(/\d+/) // ["123"] |
Metodos de Array
| Metodo | Descripción | Ejemplo |
|---|---|---|
| .push(...items) | Agrega elementos al final. Devuelve la nueva longitud | [1].push(2) // [1, 2] |
| .pop() | Elimina y devuelve el ultimo elemento | [1,2,3].pop() // 3 |
| .shift() | Elimina y devuelve el primer elemento | [1,2,3].shift() // 1 |
| .unshift(...items) | Agrega elementos al inicio. Devuelve la nueva longitud | [2,3].unshift(1) // [1,2,3] |
| .splice(start, del, ...add) | Elimina/inserta elementos en una posicion (muta el array original) | [1,2,3].splice(1,1,"x") // [1,"x",3] |
| .slice(start, end?) | Devuelve una copia de una porcion (no muta) | [1,2,3,4].slice(1,3) // [2,3] |
| .concat(...arrays) | Une arrays y devuelve uno nuevo (no muta) | [1].concat([2],[3]) // [1,2,3] |
| .indexOf(val) | Primer indice del valor (-1 si no existe) | [1,2,3].indexOf(2) // 1 |
| .includes(val) | Verifica si el valor existe (true/false) | [1,2,3].includes(2) // true |
| .find(fn) | Primer elemento que cumple la condicion (el elemento, no el indice) | [1,2,3].find(x => x > 1) // 2 |
| .findIndex(fn) | Primer indice que cumple la condicion | [1,2,3].findIndex(x => x > 1) // 1 |
| .filter(fn) | Nuevo array con los elementos que cumplen la condicion | [1,2,3,4].filter(x => x > 2) // [3,4] |
| .map(fn) | Nuevo array transformando cada elemento | [1,2,3].map(x => x * 2) // [2,4,6] |
| .reduce(fn, init?) | Reduce el array a un unico valor (acumulador) | [1,2,3].reduce((a,b) => a+b) // 6 |
| .some(fn) | true si AL MENOS UN elemento cumple la condicion | [1,2,3].some(x => x > 5) // false |
| .every(fn) | true si TODOS los elementos cumplen la condicion | [1,2,3].every(x => x > 0) // true |
| .forEach(fn) | Ejecuta fn por cada elemento (no devuelve nada, no se puede break) | [1,2].forEach(x => console.log(x)) |
| .sort(fn?) | Ordena el array IN-PLACE (muta!). Pasar comparador para numeros | [3,1,2].sort((a,b) => a-b) // [1,2,3] |
| .reverse() | Invierte el array IN-PLACE (muta!) | [1,2,3].reverse() // [3,2,1] |
| .flat(depth?) | Aplana arrays anidados (1 nivel por defecto) | [1,[2,[3]]].flat(2) // [1,2,3] |
| .flatMap(fn) | map() + flat() en un solo paso | [1,2].flatMap(x => [x, x*2]) // [1,2,2,4] |
| .join(sep?) | Une todos los elementos en un string | [1,2,3].join("-") // "1-2-3" |
| .fill(val, start?, end?) | Llena el array con un valor (muta) | [1,2,3].fill(0) // [0,0,0] |
| Array.from(iter, fn?) | Crea un array desde un iterable (map opcional en el segundo arg) | Array.from("abc") // ["a","b","c"] |
| Array.isArray(val) | Verifica si un valor es un array | Array.isArray([]) // true |
| .length | Cantidad de elementos (propiedad) | [1,2,3].length // 3 |
| ...spread | Spread: expande un array en elementos individuales | Math.max(...[1,5,3]) // 5 |
Metodos de Object
| Metodo / Sintaxis | Descripción | Ejemplo |
|---|---|---|
| obj.prop / obj["prop"] | Acceder a una propiedad (notacion de punto o corchetes) | user.name; user["name"] |
| obj.prop = val | Asignar o crear una propiedad | user.edad = 25; |
| "prop" in obj | Verifica si una propiedad existe (incluye heredadas) | "name" in user // true |
| obj.hasOwnProperty("p") | Verifica si una propiedad es propia (no heredada) | user.hasOwnProperty("name") // true |
| delete obj.prop | Elimina una propiedad del objeto | delete user.edad; |
| Object.keys(obj) | Array con todas las claves propias (enumerables) | Object.keys({a:1,b:2}) // ["a","b"] |
| Object.values(obj) | Array con todos los valores propios | Object.values({a:1,b:2}) // [1,2] |
| Object.entries(obj) | Array de pares [clave, valor] | Object.entries({a:1}) // [["a",1]] |
| Object.assign(target, ...src) | Copia propiedades de un objeto a otro (shallow merge) | Object.assign({}, {a:1}, {b:2}) |
| { ...obj } | Spread: clona o mergea objetos (shallow copy, ES6+) | const clone = { ...original } |
| const { a, b } = obj | Destructuring: extrae propiedades en variables | const { nombre, edad } = user; |
| const { a: alias } = obj | Destructuring con renombrado | const { nombre: n } = user; |
| const { a = def } = obj | Destructuring con valor por defecto | const { rol = "user" } = user; |
| Object.freeze(obj) | Congela el objeto: no se puede modificar, agregar ni eliminar propiedades | Object.freeze(config); |
| Object.is(a, b) | Comparacion mas precisa que === (NaN === NaN, -0 !== +0) | Object.is(NaN, NaN) // true |
| JSON.stringify(obj) | Convierte un objeto a string JSON | JSON.stringify({a:1}) // '{"a":1}' |
| JSON.parse(str) | Convierte un string JSON a objeto | JSON.parse('{"a":1}') // {a:1} |
Sintaxis ES6+ Moderna
| Caracteristica | Descripción | Ejemplo |
|---|---|---|
| Arrow functions | Funciones cortas con this heredado del contexto lexico | const sumar = (a, b) => a + b; |
| Template literals | Strings con interpolacion y multilinea usando backticks | `Hola ${nombre}, tenes ${edad}` |
| Destructuring arrays | Extrae elementos por posicion | const [a, , c] = [1, 2, 3]; // a=1, c=3 |
| Destructuring objects | Extrae propiedades por nombre | const { nombre, email } = user; |
| Spread (...) | Expande arrays/objetos en elementos individuales | const arr = [...arr1, ...arr2]; |
| Rest (...) | Agrupa argumentos restantes en un array | function fn(a, ...rest) { } |
| Default parameters | Valores por defecto en parametros de funcion | function fn(x = 10, y = 20) { } |
| Optional chaining ?. | Acceso seguro a propiedades anidadas (no lanza error si es null) | obj?.a?.b?.c |
| Nullish coalescing ?? | Valor por defecto solo para null/undefined (no para 0 o "") | const x = null ?? "default"; |
| import / export | Modulos ES: importar y exportar entre archivos | export const PI = 3.14; import { PI } from "./math.js"; |
| Class | Azúcar sintáctico sobre funciones constructoras y prototipos | class Perro { constructor(nombre) { this.nombre = nombre; } } |
| Promise | Objeto que representa un valor futuro (resuelve o rechaza) | new Promise((resolve, reject) => { }) |
| async / await | Azúcar sintáctico para escribir Promises como código síncrono | const data = await fetch(url); |
| for...of | Itera sobre valores de iterables (arrays, strings, Maps, Sets) | for (const item of [1,2,3]) { } |
| for...in | Itera sobre claves enumerables de un objeto (no usar para arrays) | for (const key in obj) { } |
| Map | Coleccion de pares clave-valor (cualquier tipo como clave) | const m = new Map(); m.set("a", 1); |
| Set | Coleccion de valores unicos (sin duplicados) | const s = new Set([1,2,2,3]); // Set {1,2,3} |
| Symbol | Valor primitivo unico, usado como clave de propiedad | const ID = Symbol("id"); |
| try / catch / finally | Manejo de errores: intenta, captura excepciones, siempre ejecuta finally | try { JSON.parse(str); } catch(e) { } finally { } |
| throw new Error() | Lanza una excepcion personalizada | throw new Error("algo salio mal"); |
DOM
| Metodo / Propiedad | Descripción | Ejemplo |
|---|---|---|
| document.querySelector(sel) | Primer elemento que matchea el selector CSS | document.querySelector(".card h2") |
| document.querySelectorAll(sel) | Todos los elementos que matchean (NodeList) | document.querySelectorAll("li.item") |
| document.getElementById(id) | Elemento por ID (mas rapido que querySelector) | document.getElementById("app") |
| .createElement(tag) | Crea un nuevo elemento HTML | const div = document.createElement("div"); |
| .appendChild(node) | Agrega un nodo como ultimo hijo | parent.appendChild(div); |
| .removeChild(node) | Elimina un nodo hijo | parent.removeChild(child); |
| .remove() | Elimina el elemento directamente (mas simple) | element.remove(); |
| .textContent | Texto del elemento (seguro, sin XSS) | el.textContent = "Hola"; |
| .innerHTML | HTML interno del elemento (PELIGRO: XSS si usas datos del usuario) | el.innerHTML = "<b>Hola</b>"; |
| .classList.add/remove/toggle | Manipula clases CSS del elemento | el.classList.toggle("active"); |
| .style.prop | Estilos inline del elemento (camelCase) | el.style.backgroundColor = "red"; |
| .getAttribute / setAttribute | Lee / escribe atributos HTML | el.setAttribute("data-id", "5"); |
| .dataset | Acceso a data-* attributes | el.dataset.userId; // data-user-id |
| .parentElement | Elemento padre | el.parentElement |
| .children | Elementos hijos (solo elementos, no texto) | el.children |
| .closest(sel) | Ascendiente mas cercano que matchea el selector | btn.closest(".card") |
Eventos
| Metodo / Evento | Descripción | Ejemplo |
|---|---|---|
| .addEventListener(evt, fn) | Registra un listener para un evento | btn.addEventListener("click", fn); |
| .removeEventListener(evt, fn) | Elimina un listener (misma referencia de funcion) | btn.removeEventListener("click", fn); |
| event.target | Elemento que disparo el evento (donde se originó) | e.target.classList.add("active"); |
| event.currentTarget | Elemento que tiene el listener (donde se registró) | e.currentTarget // el boton |
| event.preventDefault() | Evita la accion por defecto del navegador (submit, link) | form.addEventListener("submit", e => e.preventDefault()); |
| event.stopPropagation() | Detiene la propagacion del evento (bubbling) | e.stopPropagation(); |
| click | Click del mouse (o tap en movil) | el.addEventListener("click", fn); |
| input / change | input se dispara en cada cambio; change al perder foco | input.addEventListener("input", fn); |
| submit | Formulario enviado | form.addEventListener("submit", fn); |
| keydown / keyup | Tecla presionada / soltada | document.addEventListener("keydown", fn); |
| scroll | Scroll en la ventana o un elemento | window.addEventListener("scroll", fn); |
| resize | Ventana redimensionada | window.addEventListener("resize", fn); |
| load / DOMContentLoaded | load: todo cargado. DOMContentLoaded: solo el HTML listo | document.addEventListener("DOMContentLoaded", fn); |
| mouseenter / mouseleave | Mouse entra / sale de un elemento (no bubbling) | el.addEventListener("mouseenter", fn); |
| event delegation | Un solo listener en el padre para muchos hijos | ul.addEventListener("click", e => { if(e.target.tagName==="LI") ... }) |
Asincronía y Fetch
| Metodo / Sintaxis | Descripción | Ejemplo |
|---|---|---|
| new Promise((resolve, reject) => {}) | Crea una nueva Promise | const p = new Promise((res, rej) => { }); |
| .then(fn) / .catch(fn) | Maneja el resultado exitoso / error de una Promise | p.then(val => { }).catch(err => { }); |
| .finally(fn) | Se ejecuta siempre al final (exito o error) | p.finally(() => console.log("fin")); |
| Promise.all([...]) | Espera a que TODAS se resuelvan. Si una falla, todo falla | Promise.all([p1, p2, p3]) |
| Promise.allSettled([...]) | Espera a todas, devuelve resultados individuales | Promise.allSettled([p1, p2]) |
| Promise.race([...]) | La primera en resolver o rechazar gana | Promise.race([fetch(url), timeout(5000)]) |
| Promise.any([...]) | La primera en RESOLVER gana (ignora rechazos) | Promise.any([source1, source2]) |
| async function fn() {} | Declara una funcion que devuelve una Promise | async function getData() { } |
| await expr | Pausa hasta que la Promise se resuelva (solo dentro de async) | const data = await fetch(url); |
| fetch(url, options) | Peticion HTTP basada en Promises (GET por defecto) | const res = await fetch("https://api.com/data"); |
| response.ok | true si el status es 200-299 (SIEMPRE verificar, fetch no falla en 4xx/5xx) | if (!res.ok) throw new Error(res.status); |
| response.json() | Parsea el body como JSON (devuelve Promise) | const data = await res.json(); |
| response.text() | Devuelve el body como string | const html = await res.text(); |
| response.status | Codigo de estado HTTP (200, 404, 500...) | console.log(res.status); |
| AbortController | Cancela peticiones fetch en curso | const ctrl = new AbortController(); fetch(url, { signal: ctrl.signal }); ctrl.abort(); |
Almacenamiento
| Metodo / API | Descripción | Ejemplo |
|---|---|---|
| localStorage.setItem(k, v) | Guarda un valor (siempre string). Persiste permanentemente | localStorage.setItem("user", JSON.stringify({name:"Ana"})); |
| localStorage.getItem(k) | Lee un valor. Devuelve null si no existe | JSON.parse(localStorage.getItem("user")) |
| localStorage.removeItem(k) | Elimina un item especifico | localStorage.removeItem("user"); |
| localStorage.clear() | Elimina TODO el almacenamiento del dominio | localStorage.clear(); |
| localStorage.key(i) / .length | Clave en posicion i / cantidad de items | localStorage.length |
| sessionStorage.* | Misma API que localStorage pero se borra al cerrar la pestana | sessionStorage.setItem("draft", "hola"); |
| document.cookie | Lee/escribe cookies (string: "nombre=valor; otra=valor"). Se envia al servidor en cada request | document.cookie = "tema=dark; path=/; max-age=31536000"; |
| indexedDB.open(name, ver) | Abre o crea una base de datos del lado del cliente (asincrona, objetos estructurados, indices) | const req = indexedDB.open("MiDB", 1); |
| fetch(url).then(r => r.json()) | Datos remotos: pide JSON a una API y convierte la respuesta a objetos JS. Combina con localStorage para cache | const data = await (await fetch("https://api.example.com/data")).json(); |