JavaScript (MDN)
Este skill condensa la Guía y Referencia de JavaScript de MDN en lo que difiere de la costumbre: trampas, valores predeterminados sorprendentes, API obsoletas con sus reemplazos y los patrones que MDN recomienda. Cada afirmación en los archivos de referencia termina con la página de MDN de la que proviene. Se omiten los conceptos básicos que todo desarrollador de JavaScript conoce.
Versión cubierta
MDN sigue el estándar ECMAScript vivo y no tiene una ruta versionada. También documenta características de TC39 etapa 3, antes de que sean definitivas, por lo que los ejemplos pueden usar características que aún no están disponibles en todos lados. https://developer.mozilla.org/es/docs/Web/JavaScript
Las características recientes pueden tener disponibilidad limitada. Antes de depender de una (Temporal, ayudantes de iteradores, using, Promise.try, RegExp.escape, Error.isError, Math.sumPrecise, Uint8Array.fromBase64, métodos de Set, Map.prototype.getOrInsert), verifique el tiempo de ejecución objetivo. Los elementos que MDN marca como experimentales se etiquetan como tales en las referencias.
Cómo navegar
- Lea las reglas de mayor valor a continuación. Capturan los errores más frecuentes.
- Abra el archivo de referencia que coincida con la tarea, de la tabla al final. Cada archivo es independiente. Una tarea con zonas horarias, horario de verano (DST) o duraciones necesita ambos archivos de Temporal. Una tarea con limpieza o
usingnecesita el archivo de iteradores y gestión de recursos. - Al tocar código antiguo, lea la tabla "Patrones antiguos" al final del archivo correspondiente.
Reglas de mayor valor
- Valor predeterminado con
??, no||, y nunca los mezcle sin paréntesis. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing - Use
===.Object.is()solo para distinguir-0de+0. https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness - Pruebe propiedades propias con
Object.hasOwn(), nunca contraundefined. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn - Use un
Mappara claves conocidas solo en tiempo de ejecución, no un objeto plano. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps - Nunca extienda
Object.prototypeni los prototipos incorporados. https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain - Clone en profundidad con
structuredClone(). El operador spread yObject.assign()son superficiales. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Devuelva
({ ... })desde una función flecha: las llaves solas son un bloque. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Functions/Arrow_functions#function_body - Use campos
#privatey verifique la marca con#x in obj. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Classes/Private_elements - Un bloque
finallyque devuelve o lanza una excepción se traga el error pendiente. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/try...catch - Lance objetos
Errory envuelva causas connew Error(msg, { cause }). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Error/cause - Devuelva cada promesa de las devoluciones de llamada
theny termine las cadenas con un solocatch. https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Using_promises - Inicie trabajo asíncrono independiente junto con
Promise.all(), no conawaitsecuencial. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/async_function forEachno se detiene temprano ni espera devoluciones de llamada asíncronas. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach- Eleve devoluciones de llamada síncronas o asíncronas con
Promise.try(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Promise/try - Libere recursos con
using/await usingo unDisposableStack. Nunca confíe enFinalizationRegistrypara la limpieza. https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Resource_management await using file = await fs.open(...)necesita ambosawait: uno para la adquisición, otro para la disposición. La limpieza asíncrona va en[Symbol.asyncDispose], ya que una promesa devuelta por[Symbol.dispose]no se espera. Los dispositors se ejecutan en orden inverso, y los errores del cuerpo y los dispositors llegan como un soloSuppressedError(error= posterior,suppressed= anterior). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/await_using- Llame a los ayudantes de iterador en el iterador en lugar de distribuirlo en un array. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Iterator
- El
sort()predeterminado compara cadenas: pase(a, b) => a - b, y prefieratoSorted()para mantener el original. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - Agrupe con
Object.groupBy()/Map.groupBy(), no conreduce(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce - Las cadenas son unidades de código UTF-16: cuente los grafemas con
Intl.Segmenter. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/length - Codifique partes de URL con
encodeURIComponent(), no conencodeURI(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/encodeURI - Escape el texto de usuario en patrones con
RegExp.escape(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape - Una expresión regular
goyreutilizada mantienelastIndexentre llamadas. PrefieramatchAll(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Trunque con
Math.trunc(), pase una base aparseInt(), useNumber.isNaN(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/parseInt - Los enteros por encima de 2^53 necesitan BigInt, y JSON los corrompe a menos que use cadenas,
JSON.rawJSONocontext.source. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/JSON - Use
crypto.getRandomValues(), nuncaMath.random(), para cualquier cosa relacionada con seguridad. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Math/random - Prefiera
TemporalalDateheredado. Los objetos Temporal lanzan una excepción con<y-: usecompare(). https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Date - Use un nombre de zona IANA, no un desplazamiento fijo, en
ZonedDateTime. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets - Mantenga los valores zonificados zonificados:
toPlainDateTime()elimina la zona, por lo que la aritmética posterior ignora el horario de verano.ZonedDateTime.from()requiere una anotación[zone](analice una cadena de desplazamiento simple conInstant.from()), yZonedDateTime.since()por defecto usa horas (PT25Hal final del horario de verano) a menos que paselargestUnit. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime - Reutilice un formateador
Intly nunca compare su salida con cadenas fijas. https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Internationalization#formatting_data - Cargue módulos JSON con
with { type: "json" }y resuelva especificadores conimport.meta.resolve(). https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources - Evite depender de
Symbol.species: los motores están investigando su eliminación. https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species
Archivos de referencia
| Archivo | Léalo para |
|---|---|
| references/language-core-and-equality.md | == versus ===, coerción, typeof, let/const/var y la zona muerta, modo estricto, ASI, octales, modelo de ejecución, sintaxis obsoleta |
| references/functions-and-classes.md | funciones flecha y this, parámetros por defecto y rest, accesores, bind, campos de clase, #private, bloques estáticos, extends, super |
| references/objects-prototypes-and-proxy.md | Object.hasOwn, assign, defineProperty, freeze, groupBy, prototipos, objetos de prototipo nulo, Proxy, Reflect, Symbol, globalThis, eval |
| references/statements-and-operators.md | ??, ?., asignación lógica, spread, desestructuración, delete, trampas aritméticas y de bits, operadores BigInt, comparación, bucles, switch, etiquetas, try/finally |
| references/async-and-promises.md | cadenas de promesas, combinadores, Promise.try, withResolvers, allKeyed, orden de async/await, rechazos no manejados, fugas de memoria de promesas |
| references/iterators-and-resource-management.md | protocolos de iteración, ayudantes de iterador, Iterator.zip/concat, generadores, using, await using, DisposableStack, SuppressedError, WeakRef, FinalizationRegistry |
| references/arrays-and-collections.md | métodos de copia de arrays, at, includes, findLast, sort, reduce, arrays dispersos, Array.from, Map, métodos de Set, getOrInsert, WeakMap, WeakSet |
| references/strings.md | UTF-16, puntos de código y grafemas, localeCompare, normalize, patrones de replace, replaceAll, matchAll, split, String.raw, codificación URI |
| references/regexp.md | RegExp.escape, elección de método, lastIndex, indicadores y y d, modos u y v, \p{...}, modificadores, anclas, grupos, referencias inversas, lookbehind |
| references/numbers-math-json.md | precisión de punto flotante, parseInt, redondeo, toFixed, BigInt, Math.random, Math.sumPrecise, reglas de JSON.stringify, revivers, JSON.rawJSON |
| references/binary-data-and-shared-memory.md | arrays tipados, endianness de DataView, ArrayBuffer redimensionable y transferido, base64 y hex en Uint8Array, SharedArrayBuffer, Atomics |
| references/date-and-temporal.md | migración de Date a Temporal, elección de un tipo Temporal, reglas compartidas de Temporal, fechas y horas simples, mantenimiento de código Date |
| references/temporal-time-zones-and-durations.md | ZonedDateTime, zonas IANA, desambiguación de horario de verano y offset, since/until, balanceo y redondeo de Duration, Temporal.Now |
| references/intl.md | elección de configuración regional y respaldo, DateTimeFormat, opciones de dígitos de NumberFormat, Collator, Segmenter, PluralRules, RelativeTimeFormat, ListFormat, DurationFormat |
| references/errors-and-debugging.md | cause, subclases de Error, Error.isError, AggregateError, seguimientos de pila, mensajes de error de tiempo de ejecución comunes y sus soluciones |
| references/modules.md | módulo versus script, enlaces en vivo, ciclos, import(), import.meta, atributos de importación, import defer, import source, mapas de importación |
Las páginas rastreadas, la nota de versión y la fecha de obtención se enumeran en SOURCES.md.