Considérations relatives au changement de mode JavaScript
Le changement du mode JavaScript d’une application ou d’un script peut modifier le comportement des scripts existants. Passez en revue quelques exemples de changements de comportement avant de changer de mode JavaScript ou pour résoudre les problèmes que vous rencontrez après le changement.
Pour plus d’informations sur chaque mode JavaScript, consultez Modes JavaScript et Prise en charge des fonctionnalités du moteur JavaScript.
Ce tableau met en évidence l’évolution du comportement JavaScript de l’environnement pré-ES5, indulgent et sujet aux erreurs, à l’environnement ES5, plus strict et plus prévisible, et enfin à l’environnement plus riche en fonctionnalités d’ES12 (ECMAScript 2021).
| Fonctionnalité | Mode de compatibilité | Mode standard ES5 | ECMAScript 2021 (ES12) |
|---|---|---|---|
| Objet des arguments | L’objet arguments existe, mais il n’y a pas de mode strict, donc les modifications se répercutent sur les arguments. Impressions: |
En mode strict, l’objet arguments ne reflète pas les modifications des paramètres et génère une erreur. Impressions: |
Identique à ES5. |
| Remplacements booléens | Les booléens primitifs (vrai, faux) peuvent être remplacés, ce qui provoque un comportement inattendu. |
Les booléens primitifs sont mieux protégés, bien qu’ils puissent toujours être remplacés lorsqu’ils sont affectés à des variables. | Identique à ES5, mais le mode strict permet d’éviter certaines affectations. L’expression conditionnelle doit être écrite sous la forme suivante : |
| Exception pour les erreurs de syntaxe | Les erreurs de syntaxe lèvent des exceptions lors de l’exécution. La gestion des erreurs est incohérente. Exemple : |
Gestion plus cohérente des erreurs de syntaxe, en particulier en mode strict. Exemple : |
Le même que l’ES5, mais avec une maniabilité plus robuste et des messages d’erreur plus clairs dans les moteurs mis à jour. Exemple : |
| Incrémenter et diminuer | Autorisé sur les variables, mais peut se comporter de manière inattendue avec des expressions complexes. Impressions: |
Amélioration de la clarté, mais toujours autorisé sur les variables (var, let, const). Impressions: |
Identique à ES5, avec des règles plus strictes dans certains contextes (par exemple, const). |
| Continuations de la ligne | Autorisé avec une barre oblique inverse (\) mais déconseillé en raison de problèmes de lisibilité. Dans cet exemple, les trois fonctions sont appelées. |
Identique au mode de compatibilité ; Pas de changement dans les continuations de ligne de manutention. Dans l’exemple précédent, ES5 n’appelle que la première fonction et traite tout ce qui suit le premier commentaire, y compris le saut de ligne, comme un commentaire jusqu’à la fin de l’expression. | Identique à ES5, mais les littéraux de modèle offrent une alternative plus lisible. |
| Point-virgules manquants | L’insertion automatique d’un point-virgule (ASI) entraînait souvent des comportements inattendus. | Génère une erreur de syntaxe lorsqu’un point-virgule est manquant. | Identique à ES5. Les pratiques mises à jour encouragent les points-virgules explicites. |
| Fonctions inexistantes | L’appel d’une fonction inexistante génère une ReferenceError. |
Lève une TypeError si une non-fonction est appelée. |
Lève une EcmaError lorsqu’une fonction inexistante est appelée ou qu’une propriété est référencée. |
| Propriétés inexistantes | L’accès à une propriété inexistante renvoie undefined ; Aucune erreur n’a été générée. |
Identique à la version antérieure ES5. | Identique au mode de compatibilité et au mode standard ES5. |
| Littéraux numériques | Littéraux décimaux et hexadécimaux de base. | Introduction de règles d’analyse plus strictes et d’une meilleure gestion des littéraux numériques. | Ajout des littéraux binaires (0b), octal (0o) et BigInt (123n). |
| Mot clé réservé en tant que propriété | Il n’est pas possible d’utiliser des mots clés réservés. | Les mots-clés réservés peuvent être utilisés comme noms de propriété sans erreur, par exemple, obj.for. Imprime l’objet lorsqu’il est retourné. |
Identique à ES5. |
| Traitez, laissez et céder comme des mots-clés | let et yield ne sont pas des mots-clés et ne peuvent être utilisés que comme identifiants. |
let est introduit comme un mot-clé. Le rendement est réservé en mode strict. |
Les deux sont des mots-clés. Leur utilisation en tant qu’identifiants génère des erreurs de syntaxe. |