Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence JavaScript
  4. Instructions
  5. with

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

with

Attention :Il n'est pas recommandé d'utiliser l'instructionwith. 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'instructionwith permet d'étendre la portée chaînée d'une instruction.

Syntaxe

js
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'instructionwith 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 erreurReferenceError est renvoyée.

Note :L'utilisation de l'instructionwith n'est pas recommandée et est interdite dans lemode 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

  • Avantage : l'instructionwith permet de réduire la taille d'un fichier en réduisant la répétition d'un objet dont la dénomination est longue, et ce sans qu'il y ait d'impact sur les performances. Le changement apporté à la chaîne des portées ne représente pas un ajout de complexité important. Utiliser l'instruction dewith soulagera l'interpréteur lors de l'analyses des références objets potentiellement longues. On notera que l'alternative présentée ci-dessus permet également d'aboutir à ces avantages.
  • Inconvénient : en utilisantwith, l'objet spécifié sera utilisé à chaque fois en premier lors de la recherche des noms. Ainsi, tous les identifiants qui ne sont pas des membres de l'objet donné à l'instruction seront trouvés plus lentement. Quand il s'agit d'obtenir de bonnes performances, l'instructionwith devrait seulement être utilisée pour englober des fragments de codes où il n'y a que des accès à des membres de l'objet spécifié.

Inconvénient : l'ambiguïté

  • Inconvénient : l'instructionwith peut rendre plus compliquée, que ce soit pour un humain ou un compilateur, la recherche d'un nom non-qualifié le long de la chaîne des portées. Ainsi, avec cet exemple :

    js
    function f(x, o) {  with (o) console.log(x);}

    ce n'est que quandf est appelée quex est trouvé ou non, s'il est trouvé à partir deo ou (si o n'a pas de telle propriété) dans l'objet d'activation defx représente le premier argument de la fonction. Six n'est pas défini dans l'objet passé en second argument, il n'y aura pas d'erreur renvoyée, juste des résultats imprévus.

  • Inconvénient : Du code utilisant l'instructionwith pourrait ne pas être compatible dans le futur, en particulier lorsqu'il est utilisé avec autre chose qu'un objet simple. Par exemple :

    js
    function f(toto, values) {  with (toto) {    console.log(values);  }}

    Si vous appelezf([1,2,3], obj) dans un environnement ECMAScript 5, la référence àvalues à l'intérieur de l'instructionwith sera liée avecobj. Cependant, ECMAScript 2015 (ES6) a introduit une propriétévalues pourArray.prototype (afin qu'elle soit disponible pour chaque tableau). Dans un environnement ECMAScript 2015, la référence àvalues utilisée à l'intérieur de l'instructionwith sera résolue avec[1,2,3].values.

Exemples

Utiliserwith

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

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

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-with-statement

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp