JavaScript (MDN)
Cette compétence condense le Guide et la Référence JavaScript de MDN en ce qui diffère des habitudes : pièges, valeurs par défaut surprenantes, API obsolètes avec leurs remplacements et les motifs que MDN recommande. Chaque affirmation dans les fichiers de référence se termine par la page MDN d'où elle provient. Les bases que tout développeur JavaScript connaît sont laissées de côté.
Version couverte
MDN suit le standard ECMAScript vivant et n'a pas de chemin versionné. Il documente également les fonctionnalités de TC39 stade 3, avant qu'elles ne soient finalisées, donc les exemples peuvent utiliser des fonctionnalités qui ne sont pas encore disponibles partout. https://developer.mozilla.org/en-US/docs/Web/JavaScript
Les fonctionnalités récentes peuvent avoir une disponibilité limitée. Avant de compter sur l'une d'elles (Temporal, iterateur helpers, using, Promise.try, RegExp.escape, Error.isError, Math.sumPrecise, Uint8Array.fromBase64, méthodes de Set, Map.prototype.getOrInsert), vérifiez l'environnement d'exécution cible. Les éléments que MDN marque comme expérimentaux sont étiquetés comme tels dans les références.
Comment naviguer
- Lisez les règles de plus haute valeur ci-dessous. Elles couvrent les erreurs les plus fréquentes.
- Ouvrez le fichier de référence qui correspond à la tâche, à partir du tableau à la fin. Chaque fichier est indépendant. Une tâche impliquant les fuseaux horaires, l'heure d'été (DST) ou les durées nécessite les deux fichiers Temporal. Une tâche impliquant le nettoyage ou
usingnécessite le fichier sur les itérateurs et la gestion des ressources. - Lorsque vous touchez à du code ancien, lisez le tableau « Anciens motifs » à la fin du fichier correspondant.
Règles de plus haute valeur
- Valeur par défaut avec
??, pas||, et ne les mélangez jamais sans parenthèses. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing - Utilisez
===.Object.is()seulement pour distinguer-0de+0. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness - Testez les propriétés propres avec
Object.hasOwn(), jamais avecundefined. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn - Utilisez une
Mappour des clés connues seulement à l'exécution, pas un objet simple. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps - N'étendez jamais
Object.prototypeni les prototypes natifs. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain - Clonez en profondeur avec
structuredClone(). Spread etObject.assign()sont superficiels. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Retournez
({ ... })depuis une fonction fléchée : des accolades seules sont un bloc. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#function_body - Utilisez les champs
#privateet vérifiez la marque avec#x in obj. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_elements - Un
finallyqui retourne ou lève une exception avale l'erreur en attente. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch - Lancez des objets
Erroret enveloppez les causes avecnew Error(msg, { cause }). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause - Retournez chaque promesse depuis les callbacks
thenet terminez les chaînes par un seulcatch. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises - Lancez les travaux asynchrones indépendants ensemble avec
Promise.all(), pas avecawaitséquentiel. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function forEachne s'arrête pas tôt et n'attend pas les callbacks asynchrones. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach- Levez les callbacks synchrones ou asynchrones avec
Promise.try(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/try - Libérez les ressources avec
using/await usingou unDisposableStack. Ne comptez jamais surFinalizationRegistrypour le nettoyage. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Resource_management await using file = await fs.open(...)nécessite deuxawait: un pour l'acquisition, un pour la libération. Le nettoyage asynchrone se fait dans[Symbol.asyncDispose], car une promesse retournée par[Symbol.dispose]n'est pas attendue. Les disposers s'exécutent en ordre inverse, et les erreurs du corps et des disposers arrivent comme une seuleSuppressedError(error= plus tard,suppressed= plus tôt). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/await_using- Appelez les helpers d'itérateur sur l'itérateur plutôt que de le déployer dans un tableau. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator
sort()par défaut compare des chaînes : passez(a, b) => a - b, et préféreztoSorted()pour conserver l'original. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort- Groupez avec
Object.groupBy()/Map.groupBy(), pasreduce(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce - Les chaînes sont des unités de code UTF-16 : comptez les graphèmes avec
Intl.Segmenter. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length - Encodez les parties d'URL avec
encodeURIComponent(), pasencodeURI(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI - Échappez le texte utilisateur dans les motifs avec
RegExp.escape(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape - Une expression régulière réutilisée avec les drapeaux
gouyconservelastIndexentre les appels. PréférezmatchAll(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test - Tronquez avec
Math.trunc(), passez une base àparseInt(), utilisezNumber.isNaN(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt - Les entiers au-dessus de 2^53 nécessitent BigInt, et JSON les corrompt sauf si vous utilisez des chaînes,
JSON.rawJSONoucontext.source. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON - Utilisez
crypto.getRandomValues(), jamaisMath.random(), pour tout ce qui touche à la sécurité. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random - Préférez
TemporalauDatehérité. Les objets Temporal lèvent une exception sur<et-: utilisezcompare(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date - Utilisez un nom de zone IANA, pas un décalage fixe, dans
ZonedDateTime. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets - Gardez les valeurs zonées zonées :
toPlainDateTime()supprime la zone, donc l'arithmétique ultérieure ignore l'heure d'été (DST).ZonedDateTime.from()nécessite une annotation[zone](analysez une chaîne de décalage nue avecInstant.from()), etZonedDateTime.since()est par défaut en heures (PT25Hà travers une fin de DST) sauf si vous passezlargestUnit. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime - Réutilisez un formateur
Intlet ne comparez jamais sa sortie avec des chaînes fixes. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Internationalization#formatting_data - Chargez les modules JSON avec
with { type: "json" }et résolvez les spécificateurs avecimport.meta.resolve(). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources - Évitez de compter sur
Symbol.species: les moteurs étudient sa suppression. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species
Fichiers de référence
| Fichier | Lisez-le pour |
|---|---|
| references/language-core-and-equality.md | == contre ===, coercition, typeof, let/const/var et la zone morte, mode strict, ASI, octaux, modèle d'exécution, syntaxe obsolète |
| references/functions-and-classes.md | fonctions fléchées et this, paramètres par défaut et reste, accesseurs, bind, champs de classe, #private, blocs statiques, extends, super |
| references/objects-prototypes-and-proxy.md | Object.hasOwn, assign, defineProperty, freeze, groupBy, prototypes, objets à prototype null, Proxy, Reflect, Symbol, globalThis, eval |
| references/statements-and-operators.md | ??, ?., affectation logique, spread, déstructuration, delete, pièges arithmétiques et binaires, opérateurs BigInt, comparaison, boucles, switch, étiquettes, try/finally |
| references/async-and-promises.md | chaînes de promesses, combinateurs, Promise.try, withResolvers, allKeyed, ordre de async/await, rejets non traités, fuites mémoire de promesses |
| references/iterators-and-resource-management.md | protocoles d'itération, helpers d'itérateur, Iterator.zip/concat, générateurs, using, await using, DisposableStack, SuppressedError, WeakRef, FinalizationRegistry |
| references/arrays-and-collections.md | méthodes de copie de tableau, at, includes, findLast, sort, reduce, tableaux clairsemés, Array.from, Map, méthodes de Set, getOrInsert, WeakMap, WeakSet |
| references/strings.md | UTF-16, points de code et graphèmes, localeCompare, normalize, motifs replace, replaceAll, matchAll, split, String.raw, encodage URI |
| references/regexp.md | RegExp.escape, choix de méthode, lastIndex, drapeaux y et d, modes u et v, \p{...}, modificateurs, ancres, groupes, références arrière, lookbehind |
| references/numbers-math-json.md | précision flottante, parseInt, arrondi, toFixed, BigInt, Math.random, Math.sumPrecise, règles de JSON.stringify, revivers, JSON.rawJSON |
| references/binary-data-and-shared-memory.md | tableaux typés, boutisme DataView, ArrayBuffer redimensionnable et transféré, base64 et hex sur Uint8Array, SharedArrayBuffer, Atomics |
| references/date-and-temporal.md | migration de Date vers Temporal, choix d'un type Temporal, règles Temporal partagées, dates et heures simples, maintenance du code Date |
| references/temporal-time-zones-and-durations.md | ZonedDateTime, zones IANA, désambiguïsation DST et offset, since/until, équilibrage et arrondi de Duration, Temporal.Now |
| references/intl.md | choix de locale et repli, DateTimeFormat, options de chiffres NumberFormat, Collator, Segmenter, PluralRules, RelativeTimeFormat, ListFormat, DurationFormat |
| references/errors-and-debugging.md | cause, sous-classes d'Error, Error.isError, AggregateError, traces de pile, messages d'erreur d'exécution courants et leurs correctifs |
| references/modules.md | module contre script, liaisons vivantes, cycles, import(), import.meta, attributs d'importation, import defer, import source, cartes d'importation |
Les pages explorées, la note de version et la date de récupération sont listées dans SOURCES.md.