JavaScript (MDN)
Esta skill condensa o Guia e a Referência JavaScript da MDN no que difere dos hábitos comuns: armadilhas, defaults surpreendentes, APIs obsoletas com suas substitutas e os padrões que a MDN recomenda. Cada afirmação nos arquivos de referência termina com a página MDN de onde veio. Conceitos básicos que todo desenvolvedor JavaScript conhece são omitidos.
Versão coberta
A MDN acompanha o padrão ECMAScript vivo e não possui um caminho versionado. Ela também documenta funcionalidades do estágio 3 do TC39, antes de serem finalizadas, portanto os exemplos podem usar funcionalidades que ainda não estão disponíveis em todos os lugares. https://developer.mozilla.org/en-US/docs/Web/JavaScript
Funcionalidades recentes podem ter disponibilidade limitada. Antes de confiar em uma (Temporal, iteradores helpers, using, Promise.try, RegExp.escape, Error.isError, Math.sumPrecise, Uint8Array.fromBase64, métodos de Set, Map.prototype.getOrInsert), verifique o runtime alvo. Itens que a MDN marca como experimentais estão rotulados como tal nas referências.
Como navegar
- Leia as regras de maior valor abaixo. Elas capturam os erros mais frequentes.
- Abra o arquivo de referência que corresponde à tarefa, a partir da tabela no final. Cada arquivo é independente. Uma tarefa com fusos horários, horário de verão ou durações precisa dos dois arquivos Temporal. Uma tarefa com limpeza ou
usingprecisa do arquivo de iteradores e gerenciamento de recursos. - Ao tocar em código antigo, leia a tabela "Padrões antigos" no final do arquivo correspondente.
Regras de maior valor
- Default com
??, não||, e nunca os misture sem parênteses. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing - Use
===. UseObject.is()apenas para distinguir-0de+0. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness - Teste propriedades próprias com
Object.hasOwn(), nunca contraundefined. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn - Use
Mappara chaves conhecidas apenas em tempo de execução, não um objeto simples. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps - Nunca estenda
Object.prototypeou protótipos nativos. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain - Clone profundamente com
structuredClone(). Spread eObject.assign()são rasos. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Retorne
({ ... })de uma arrow: chaves sozinhas são um bloco. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#function_body - Use campos
#privatee verifique a marca com#x in obj. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_elements - Um
finallyque retorna ou lança engole o erro pendente. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch - Lance objetos
Errore envolva causas comnew Error(msg, { cause }). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause - Retorne toda promise de callbacks
thene termine cadeias com um únicocatch. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises - Inicie trabalho assíncrono independente junto com
Promise.all(), não comawaitsequencial. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function forEachnão para cedo nem aguarda callbacks assíncronos. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach- Eleve callbacks síncronos ou assíncronos com
Promise.try(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/try - Libere recursos com
using/await usingou umDisposableStack. Nunca confie emFinalizationRegistrypara limpeza. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Resource_management await using file = await fs.open(...)precisa de ambos os awaits: um para aquisição, outro para descarte. A limpeza assíncrona vai em[Symbol.asyncDispose], já que uma promise retornada por[Symbol.dispose]não é aguardada. Os dispoers executam em ordem reversa, e erros do corpo e dos dispoers chegam como um únicoSuppressedError(error= posterior,suppressed= anterior). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/await_using- Chame helpers de iterador no iterador em vez de espalhá-lo em um array. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator
sort()padrão compara strings: passe(a, b) => a - b, e prefiratoSorted()para manter o original. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort- Agrupe com
Object.groupBy()/Map.groupBy(), não comreduce(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce - Strings são unidades de código UTF-16: conte grafemas com
Intl.Segmenter. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length - Codifique partes de URL com
encodeURIComponent(), nãoencodeURI(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI - Escape texto de usuário em padrões com
RegExp.escape(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape - Uma regex
gouyreutilizada mantémlastIndexentre chamadas. PrefiramatchAll(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Trunque com
Math.trunc(), passe uma base paraparseInt(), useNumber.isNaN(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt - Inteiros acima de 2^53 precisam de BigInt, e o JSON os corrompe a menos que você use strings,
JSON.rawJSONoucontext.source. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON - Use
crypto.getRandomValues(), nuncaMath.random(), para qualquer coisa relacionada à segurança. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random - Prefira
Temporalao legadoDate. Objetos Temporal lançam exceção com<e-: usecompare(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date - Use um nome de zona IANA, não um offset fixo, em
ZonedDateTime. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets - Mantenha valores zonados zonados:
toPlainDateTime()remove a zona, então aritmética posterior ignora horário de verão.ZonedDateTime.from()requer uma anotação[zone](analise uma string de offset pura comInstant.from()), eZonedDateTime.since()padroniza para horas (PT25Hatravés de um fim de horário de verão) a menos que você passelargestUnit. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime - Reutilize um formatador
Intle nunca compare sua saída com strings fixas. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Internationalization#formatting_data - Carregue módulos JSON com
with { type: "json" }e resolva especificadores comimport.meta.resolve(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources - Evite confiar em
Symbol.species: os engines estão investigando sua remoção. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species
Arquivos de referência
| Arquivo | Leia para |
|---|---|
| references/language-core-and-equality.md | == versus ===, coerção, typeof, let/const/var e a zona morta, modo estrito, ASI, octais, modelo de execução, sintaxe obsoleta |
| references/functions-and-classes.md | funções arrow e this, parâmetros default e rest, acessores, bind, campos de classe, #private, blocos static, extends, super |
| references/objects-prototypes-and-proxy.md | Object.hasOwn, assign, defineProperty, freeze, groupBy, protótipos, objetos de protótipo nulo, Proxy, Reflect, Symbol, globalThis, eval |
| references/statements-and-operators.md | ??, ?., atribuição lógica, spread, desestruturação, delete, armadilhas aritméticas e bit a bit, operadores BigInt, comparação, loops, switch, labels, try/finally |
| references/async-and-promises.md | cadeias de promise, combinadores, Promise.try, withResolvers, allKeyed, ordenação async/await, rejeições não tratadas, vazamentos de memória de promise |
| references/iterators-and-resource-management.md | protocolos de iteração, helpers de iterador, Iterator.zip/concat, generators, using, await using, DisposableStack, SuppressedError, WeakRef, FinalizationRegistry |
| references/arrays-and-collections.md | métodos de cópia de array, at, includes, findLast, sort, reduce, arrays esparsos, Array.from, Map, métodos de Set, getOrInsert, WeakMap, WeakSet |
| references/strings.md | UTF-16, code points e grafemas, localeCompare, normalize, padrões replace, replaceAll, matchAll, split, String.raw, codificação de URI |
| references/regexp.md | RegExp.escape, escolha de método, lastIndex, flags y e d, modos u e v, \p{...}, modificadores, âncoras, grupos, backreferences, lookbehind |
| references/numbers-math-json.md | precisão de float, parseInt, arredondamento, toFixed, BigInt, Math.random, Math.sumPrecise, regras de JSON.stringify, revivers, JSON.rawJSON |
| references/binary-data-and-shared-memory.md | arrays tipados, endianness de DataView, ArrayBuffer redimensionável e transferido, base64 e hex em Uint8Array, SharedArrayBuffer, Atomics |
| references/date-and-temporal.md | migração de Date para Temporal, escolha de um tipo Temporal, regras Temporal compartilhadas, datas e horas simples, manutenção de código Date |
| references/temporal-time-zones-and-durations.md | ZonedDateTime, zonas IANA, desambiguação de horário de verão e offset, since/until, balanceamento e arredondamento de Duration, Temporal.Now |
| references/intl.md | escolha de locale e fallback, DateTimeFormat, opções de dígitos de NumberFormat, Collator, Segmenter, PluralRules, RelativeTimeFormat, ListFormat, DurationFormat |
| references/errors-and-debugging.md | cause, subclasses de Error, Error.isError, AggregateError, stack traces, mensagens de erro de runtime comuns e suas correções |
| references/modules.md | módulo versus script, live bindings, ciclos, import(), import.meta, atributos de importação, import defer, import source, mapas de importação |
Páginas rastreadas, nota de versão e data de busca estão listados em SOURCES.md.