--- title: with slug: Web/JavaScript/Reference/Statements/with tags: - Déprécié - Instruction - JavaScript - Reference translation_of: Web/JavaScript/Reference/Statements/with original_slug: Web/JavaScript/Reference/Instructions/with ---
{{jsSidebar("Statements")}}
Il n'est pas recommandé d'utiliser l'instruction with. En effet, elle est parfois source de problèmes de compatibilité ou de bogues. Se référer au paragraphe « Inconvénient : l'ambiguïté » de la section « Description » pour plus de détails.

L'instruction with permet d'étendre la portée chaînée d'une instruction.

Syntaxe

with (expression) {
  instruction
}
expression
L'expression fournie est ajoutée à la portée chaînée utilisée lors de l'évaluation de l'instruction. Les parenthèses sont obligatoires.
instruction
N'importe quelle instruction. Afin d'utiliser plusieurs instructions, on peut utiliser un bloc d'instructions ({ ... }) pour les regrouper.

Description

Dès qu'un nom non-qualifié est utilisé, JavaScript cherche dans la chaîne des portées associée à l'exécution une fonction ou un script qui contiendrait ce nom. L'instruction with ajoute l'objet donné à la tête de la chaîne des portées lors de l'évaluation des instructions qu'elle contient. Si un nom non-qualifié est utilisé parmi ces instructions correspond à une propriété de la chaîne des portées, le nom sera alors lié à la propriété et à l'objet contenant cette propriété, sinon une erreur ReferenceError est renvoyée.

L'utilisation de l'instruction with n'est pas recommandée et est interdite dans le mode strict d'ECMAScript 5. L'alternative recommandée est d'assigner l'objet utilisant les propriétés désirées à une variable temporaire.

Avantages et inconvénients : les performances

Inconvénient : l'ambiguïté

Exemples

Utiliser with

L'instruction with suivante indique que l'objet {{jsxref("Math")}} est l'objet par défaut. Les instructions qui suivent font référence à la propriété {{jsxref("Math.PI")}} et aux méthodes {{jsxref("Math.cos()")}} et {{jsxref("Math.sin()")}}, sans objet spécifié. JavaScript utilise donc l'objet Math pour ces références.

var a, x, y;
var r = 10;

with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

Spécifications

Spécification État Commentaires
{{SpecName('ESDraft', '#sec-with-statement', 'with statement')}} {{Spec2('ESDraft')}}  
{{SpecName('ES6', '#sec-with-statement', 'Instruction with')}} {{Spec2('ES6')}}  
{{SpecName('ES5.1', '#sec-12.10', 'Instruction with')}} {{Spec2('ES5.1')}} Désormais interdit en mode strict.
{{SpecName('ES3', '#sec-12.10', 'Instruction with')}} {{Spec2('ES3')}}  
{{SpecName('ES1', '#sec-12.10', 'Instruction with')}} {{Spec2('ES1')}} Définition initiale.

Compatibilité des navigateurs

{{Compat("javascript.statements.with")}}

Voir aussi