Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette page liste les fonctionnalités de JavaScript qui sont dépréciées (c'est-à-dire encore disponibles mais prévues pour être supprimées) et obsolètes (c'est-à-dire plus utilisables).
Ces fonctionnalités dépréciées peuvent encore être utilisées, mais doivent être utilisées avec prudence car elles ne sont pas obligatoirement implémentées par tous les moteurs JavaScript. Vous devriez travailler à les supprimer de votre code.
Certaines de ces fonctionnalités dépréciées sont listées dans la section Annexe B (angl.) de la spécification ECMAScript. Cette section est décrite comme normative optionnelle — c'est-à-dire que les navigateurs web doivent implémenter ces fonctionnalités, tandis que les hôtes non web peuvent ne pas le faire. Ces fonctionnalités sont probablement stables car les supprimer provoquerait des problèmes de compatibilité ascendante et casserait les sites web existants. (JavaScript a pour objectif de conception de « ne pas casser le web ».) Cependant, elles ne sont pas portables sur toutes les plateformes et peuvent ne pas être prises en charge par tous les outils d'analyse, il est donc conseillé de ne pas les utiliser, comme l'introduction de l'Annexe B l'indique :
… Toutes les fonctionnalités et tous les comportements du langage décrits dans la présente annexe présentent une ou plusieurs caractéristiques indésirables et, en l'absence d'usage historique, seraient supprimés de la présente spécification. …
… Les programmeur·euse·s ne devraient pas utiliser ou supposer l'existence de ces fonctionnalités et comportements lors de l'écriture de nouveau code ECMAScript. …
Certaines autres, bien que dans le corps principal de la spécification, sont également marquées comme normatives optionnelles et ne devraient pas être utilisées de manière dépendante.
Le code source JavaScript, s'il est analysé comme des scripts, permet des commentaires de type HTML, comme si le script faisait partie d'une balise <script>.
Le code suivant est un JavaScript valide lorsqu'il est exécuté dans un navigateur web (ou Node.js, qui utilise le moteur V8 de Chrome) :
<!-- et --> agissent tous deux comme //, c'est-à-dire comme des commentaires sur une ligne. --> n'est valide qu'au début d'une ligne (pour éviter toute ambiguïté avec un décrément postfixé suivi d'un opérateur supérieur), tandis que <!-- peut apparaître n'importe où dans la ligne.
Les propriétés suivantes sont dépréciées. Cela n'affecte pas leur utilisation dans les chaînes de caractères de remplacement :
$1-$9Sous-chaînes de caractères entre parenthèses, si elles existent.
input, $_La chaîne de caractères par rapport à laquelle une expression rationnelle est comparée.
lastMatch, $&La dernière sous-chaîne de caractères correspondante.
lastParen, $+La dernière sous-chaîne de caractères entre parenthèses, si elle existe.
leftContext, $`La sous-chaîne de caractères précédant la correspondance la plus récente.
rightContext, $'La sous-chaîne de caractères suivant la correspondance la plus récente.
Attention : Évitez d'utiliser ces propriétés statiques, car elles peuvent causer des problèmes lors de l'interaction avec du code externe (angl.) !
La méthode compile() est dépréciée. Il est recommandé de créer une nouvelle instance de RegExp à la place.
Les syntaxes regex suivantes sont dépréciées et ne sont disponibles qu'en mode insensible à Unicode. En mode sensible à Unicode, elles sont toutes des erreurs de syntaxe :
L'instruction with est dépréciée et indisponible en mode strict.
Les initialisateurs dans les déclarations var des en-têtes de boucles for…in sont dépréciés et produisent des erreurs de syntaxe en mode strict. L'expression d'initialisation est évaluée et affectée à la variable, mais la valeur serait immédiatement réaffectée lors de la première itération de la boucle.
Normalement, le bloc catch d'une instruction try…catch ne peut contenir aucune déclaration de variable portant le même nom que les variables liées dans le catch(). Une grammaire étendue permet au bloc catch de contenir une variable déclarée avec var portant le même nom que l'identifiant lié au catch, mais uniquement si la liaison catch est un identifiant simple, et non un modèle de déstructuration. Cependant, l'initialisation et l'affectation de cette variable n'agiraient que sur l'identifiant lié au catch, au lieu de la variable de portée supérieure, et le comportement pourrait être déroutant.
Cela est répertorié dans l'annexe B de la spécification et peut donc ne pas être implémenté partout. Évitez tout conflit de noms entre l'identifiant lié au catch et les variables déclarées dans le bloc catch.
Ces fonctionnalités obsolètes ont été entièrement supprimées de JavaScript et ne peuvent plus être utilisées à partir de la version indiquée de JavaScript.
Les éléments suivants sont désormais des propriétés des instances de RegExp, et non plus du constructeur RegExp :
| global | Indique si l'expression régulière doit être testée contre toutes les correspondances possibles dans une chaîne, ou seulement contre la première. |
| ignoreCase | Indique si la casse doit être ignorée lors de la tentative de correspondance dans une chaîne. |
| lastIndex | L'index à partir duquel commencer la prochaine correspondance. |
| multiline (également via RegExp.$*) | Indique si la recherche doit s'effectuer sur plusieurs lignes. |
| source | Le texte du motif. |
La méthode valueOf() n'est plus spécialisée pour RegExp. Elle utilise Object.prototype.valueOf(), qui renvoie elle-même.
| __count__ | Retourne le nombre de propriétés énumérables directement sur un objet défini par l'utilisateur·ice. | Object.keys() |
| __parent__ | Pointe vers le contexte d'un objet. | Pas de remplacement direct |
| __iterator__ | Utilisé avec les itérateurs hérités. | Symbol.iterator et les nouveaux protocoles d'itération |
| __noSuchMethod__ | Une méthode appelée lorsqu'une propriété inexistante est appelée en tant que méthode. | Proxy |
| Object.prototype.eval() | Évalue une chaîne de code JavaScript dans le contexte de l'objet défini. | Pas de remplacement direct |
| Object.observe() | Observation asynchrone des changements d'un objet. | Proxy |
| Object.unobserve() | Supprime les observateurs. | Proxy |
| Object.getNotifier() | Crée un objet notificateur qui permet de déclencher de manière synthétique un changement observable avec Object.observe(). | Pas de remplacement direct |
| Object.prototype.watch() | Attache un gestionnaire de fonction de rappel à une propriété qui est appelé lorsque la propriété est assignée. | Proxy |
| Object.prototype.unwatch() | Supprime les gestionnaires de surveillance sur une propriété. | Proxy |
| Array.observe() | Observation asynchrone des modifications des tableaux. | Proxy |
| Array.unobserve() | Supprimer les observateurs. | Proxy |
Les méthodes toSource() des tableaux, nombres, chaînes de caractères, etc. et la fonction globale uneval() sont obsolètes. Utilisez toString(), ou écrivez votre propre méthode de sérialisation à la place.
Les instructions de fonction génératrice héritée et les expressions de fonction génératrice héritée sont supprimées. La syntaxe de fonction génératrice héritée réutilise le mot-clé function, qui devient automatiquement une fonction génératrice lorsqu'il y a une ou plusieurs expressions yield dans le corps — c'est maintenant une erreur de syntaxe. Utilisez les instructions function* et les expressions function* à la place.
Les compréhensions de tableau et les compréhensions de générateur sont supprimées.
Firefox, avant la version 26, a implémenté un autre protocole d'itérateur similaire au protocole d'itération standard. Un objet est un itérateur héritée lorsqu'il implémente une méthode next(), qui produit une valeur à chaque appel et lance un objet StopIteration à la fin de l'itération. Ce protocole d'itérateur héritée diffère du protocole d'itérateur standard :
Cette fonctionnalité, ainsi que le constructeur global StopIteration, ont été supprimés dans Firefox 58+. Pour les utilisations futures, envisagez d'utiliser les boucles for…of et le protocole d'itération.
Les variables dièze sont obsolètes. Pour créer des structures circulaires, utilisez plutôt des variables temporaires.
Cette page a été modifiée le 25 avr. 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.