JavaScript (MDN)
Diese Skill verdichtet die MDN JavaScript-Anleitung und -Referenz auf das Wesentliche, das sich von der Gewohnheit unterscheidet: Fallstricke, überraschende Standardwerte, veraltete APIs mit ihren Ersetzungen und die von MDN empfohlenen Muster. Jede Behauptung in den Referenzdateien endet mit dem MDN-Link, aus dem sie stammt. Grundlagen, die jeder JavaScript-Entwickler kennt, werden nicht behandelt.
Behandelte Version
MDN folgt dem lebenden ECMAScript-Standard und hat keinen versionierten Pfad. Es dokumentiert auch Funktionen aus TC39 Stage 3, bevor sie endgültig sind. Daher können Beispiele Funktionen verwenden, die noch nicht überall verfügbar sind. https://developer.mozilla.org/en-US/docs/Web/JavaScript
Neuere Funktionen sind möglicherweise nur eingeschränkt verfügbar. Bevor Sie sich auf eine verlassen (Temporal, Iterator-Helfer, using, Promise.try, RegExp.escape, Error.isError, Math.sumPrecise, Uint8Array.fromBase64, Set-Methoden, Map.prototype.getOrInsert), überprüfen Sie die Ziel-Laufzeitumgebung. Elemente, die MDN als experimentell markiert, sind in den Referenzen entsprechend gekennzeichnet.
Navigation
- Lesen Sie die folgenden Regeln mit dem höchsten Wert. Sie decken die häufigsten Fehler ab.
- Öffnen Sie die Referenzdatei, die zur Aufgabe passt, aus der Tabelle am Ende. Jede Datei ist in sich abgeschlossen. Eine Aufgabe mit Zeitzonen, Sommerzeit oder Dauern benötigt beide Temporal-Dateien. Eine Aufgabe mit Bereinigung oder
usingbenötigt die Datei für Iteratoren und Ressourcenverwaltung. - Wenn Sie alten Code bearbeiten, lesen Sie die Tabelle „Alte Muster“ am Ende der passenden Datei.
Regeln mit höchstem Wert
- Standard mit
??, nicht mit||, und niemals ohne Klammern mischen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing ===verwenden.Object.is()nur, um-0von+0zu unterscheiden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness- Eigene Eigenschaften mit
Object.hasOwn()prüfen, nie gegenundefined. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn - Für Schlüssel, die nur zur Laufzeit bekannt sind, eine
Mapverwenden, kein einfaches Objekt. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps - Niemals
Object.prototypeoder integrierte Prototypen erweitern. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain - Tiefe Klone mit
structuredClone(). Spread undObject.assign()sind flach. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Bei Pfeilfunktionen
({ ... })zurückgeben: geschweifte Klammern allein sind ein Block. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#function_body #private-Felder verwenden und Markenprüfung mit#x in objdurchführen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_elements- Ein
finally, das etwas zurückgibt oder wirft, schluckt den ausstehenden Fehler. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch - Fehlerobjekte werfen und Ursachen mit
new Error(msg, { cause })verpacken. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause - Jedes Promise aus
then-Callbacks zurückgeben und Ketten mit einemcatchbeenden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises - Unabhängige asynchrone Arbeiten mit
Promise.all()gleichzeitig starten, nicht sequenziell mitawait. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function forEachstoppt weder frühzeitig noch wartet es auf asynchrone Callbacks. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach- Synchrone-oder-asynchrone Callbacks mit
Promise.try()anheben. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/try - Ressourcen mit
using/await usingoder einemDisposableStackfreigeben. Für Bereinigung nie aufFinalizationRegistryverlassen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Resource_management await using file = await fs.open(...)benötigt beideawait: eines für die Beschaffung, eines für die Freigabe. Asynchrone Bereinigung erfolgt in[Symbol.asyncDispose], da ein von[Symbol.dispose]zurückgegebenes Promise nicht abgewartet wird. Disposer werden in umgekehrter Reihenfolge ausgeführt, und Fehler aus dem Rumpf und den Disposern treten als einSuppressedErrorauf (error= später,suppressed= früher). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/await_using- Iterator-Helfer auf dem Iterator aufrufen, anstatt ihn in ein Array zu spreaden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator
- Standardmäßig vergleicht
sort()Strings:(a, b) => a - bübergeben undtoSorted()bevorzugen, um das Original zu behalten. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - Gruppieren mit
Object.groupBy()/Map.groupBy(), nicht mitreduce(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce - Strings sind UTF-16-Code-Einheiten: Grapheme mit
Intl.Segmenterzählen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length - URL-Teile mit
encodeURIComponent()kodieren, nicht mitencodeURI(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI - Benutzertext in Mustern mit
RegExp.escape()escapen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape - Ein wiederverwendeter
g- odery-Regex behältlastIndexzwischen den Aufrufen.matchAll()bevorzugen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Mit
Math.trunc()kürzen, eine Basis anparseInt()übergeben,Number.isNaN()verwenden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt - Ganze Zahlen über 2^53 benötigen BigInt, und JSON beschädigt sie, es sei denn, Sie verwenden Strings,
JSON.rawJSONodercontext.source. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON - Für alles, was mit Sicherheit zu tun hat,
crypto.getRandomValues()verwenden, niemalsMath.random(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random Temporaldem veraltetenDatevorziehen. Temporal-Objekte werfen bei<und-:compare()verwenden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date- In
ZonedDateTimeeinen IANA-Zonennamen verwenden, keinen festen Offset. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets - Zonierte Werte beibehalten:
toPlainDateTime()entfernt die Zone, sodass spätere Arithmetik die Sommerzeit ignoriert.ZonedDateTime.from()erfordert eine[zone]-Anmerkung (einen einfachen Offset-String mitInstant.from()parsen), undZonedDateTime.since()standardmäßig auf Stunden (PT25Hüber ein Sommerzeitende hinweg), es sei denn, Sie übergebenlargestUnit. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime - Einen einzigen
Intl-Formatierer wiederverwenden und seine Ausgabe niemals mit festen Strings vergleichen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Internationalization#formatting_data - JSON-Module mit
with { type: "json" }laden und Spezifizierer mitimport.meta.resolve()auflösen. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources - Sich nicht auf
Symbol.speciesverlassen: Engines prüfen die Entfernung. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species
Referenzdateien
| Datei | Lesen für |
|---|---|
| references/language-core-and-equality.md | == versus ===, Koerzition, typeof, let/const/var und die Totzone, strikter Modus, ASI, Oktalzahlen, Ausführungsmodell, veraltete Syntax |
| references/functions-and-classes.md | Pfeilfunktionen und this, Standard- und Restparameter, Accessoren, bind, Klassenfelder, #private, statische Blöcke, extends, super |
| references/objects-prototypes-and-proxy.md | Object.hasOwn, assign, defineProperty, freeze, groupBy, Prototypen, null-prototype Objekte, Proxy, Reflect, Symbol, globalThis, eval |
| references/statements-and-operators.md | ??, ?., logische Zuweisung, Spread, Destrukturierung, delete, arithmetische und bitweise Fallstricke, BigInt-Operatoren, Vergleich, Schleifen, switch, Labels, try/finally |
| references/async-and-promises.md | Promise-Ketten, Kombinatoren, Promise.try, withResolvers, allKeyed, async/await-Reihenfolge, nicht behandelte Zurückweisungen, Promise-Speicherlecks |
| references/iterators-and-resource-management.md | Iterationsprotokolle, Iterator-Helfer, Iterator.zip/concat, Generatoren, using, await using, DisposableStack, SuppressedError, WeakRef, FinalizationRegistry |
| references/arrays-and-collections.md | Kopierende Array-Methoden, at, includes, findLast, sort, reduce, sparse Arrays, Array.from, Map, Set-Methoden, getOrInsert, WeakMap, WeakSet |
| references/strings.md | UTF-16, Codepunkte und Grapheme, localeCompare, normalize, replace-Muster, replaceAll, matchAll, split, String.raw, URI-Kodierung |
| references/regexp.md | RegExp.escape, Methodenauswahl, lastIndex, y- und d-Flags, u- und v-Modi, \p{...}, Modifikatoren, Anker, Gruppen, Rückreferenzen, Lookbehind |
| references/numbers-math-json.md | Gleitkommagenauigkeit, parseInt, Runden, toFixed, BigInt, Math.random, Math.sumPrecise, JSON.stringify-Regeln, Reviver, JSON.rawJSON |
| references/binary-data-and-shared-memory.md | Typisierte Arrays, DataView-Endianness, veränderbare und übertragene ArrayBuffer, base64 und hex auf Uint8Array, SharedArrayBuffer, Atomics |
| references/date-and-temporal.md | Wechsel von Date zu Temporal, Wahl eines Temporal-Typs, gemeinsame Temporal-Regeln, einfache Daten und Uhrzeiten, Pflege von Date-Code |
| references/temporal-time-zones-and-durations.md | ZonedDateTime, IANA-Zonen, Sommerzeit-Disambiguierung und offset, since/until, Duration-Abgleich und -Rundung, Temporal.Now |
| references/intl.md | Gebietschema-Wahl und Rückfall, DateTimeFormat, NumberFormat-Ziffernoptionen, Collator, Segmenter, PluralRules, RelativeTimeFormat, ListFormat, DurationFormat |
| references/errors-and-debugging.md | cause, Error-Unterklassen, Error.isError, AggregateError, Stack-Traces, häufige Laufzeitfehlermeldungen und deren Behebungen |
| references/modules.md | Modul versus Skript, Live-Bindungen, Zyklen, import(), import.meta, Import-Attribute, import defer, import source, Import-Maps |
Gecrawlte Seiten, Versionshinweise und Abrufdatum sind in SOURCES.md aufgeführt.