You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/07-optional-chaining/article.md
+18-17Lines changed: 18 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,19 +32,19 @@ Dans de nombreux cas pratiques, nous préférerions obtenir `undefined` au lieu
32
32
let html =document.querySelector('.elem').innerHTML; // error if it's null
33
33
```
34
34
35
-
Encore une fois, si l'élément n'existe pas, nous obtiendrons une erreur lors de l'accès à la propriété `.innerHTML` de`null`. Et dans certains cas, lorsque l'absence de l'élément est normale, nous aimerions éviter l'erreur et accepter simplement `html = null` comme résultat.
35
+
Encore une fois, si l'élément n'existe pas, nous obtiendrons une erreur lors de l'accès à la propriété `.innerHTML` de`null`. Et dans certains cas, lorsque l'absence de l'élément est normale, nous aimerions éviter l'erreur et accepter simplement `html = null` comme résultat.
36
36
37
37
Comment peut-on le faire ?
38
38
39
-
La solution évidente serait de vérifier la valeur en utilisant `if` ou l'opérateur conditionnel `?`, Avant d'accéder à sa propriété, comme ceci :
39
+
La solution évidente serait de vérifier la valeur en utilisant `if` ou l'opérateur conditionnel `?`, avant d'accéder à sa propriété, comme ceci :
Et le chemin complet vers la propriété garantit que tous les composants existent (sinon, l'évaluation s'arrête), mais n'est pas non plus idéal.
78
78
79
-
Comme vous pouvez le voir, les noms de propriétés sont toujours dupliqués dans le code. Par exemple. dans le code ci-dessus, `user.address` apparaît trois fois.
79
+
Comme vous pouvez le voir, les noms de propriétés sont toujours dupliqués dans le code. Par exemple, dans le code ci-dessus, `user.address` apparaît trois fois.
80
80
81
-
C'est pourquoi le chaînage facultatif `?.`A été ajouté au langage. Pour résoudre ce problème une fois pour toutes !
81
+
C'est pourquoi le chaînage facultatif `?.`a été ajouté au langage. Pour résoudre ce problème une fois pour toutes !
82
82
83
83
84
84
## Chaînage optionnel
@@ -88,23 +88,24 @@ Le chaînage optionnel `?.` arrête l'évaluation si la valeur avant `?.` est `u
88
88
**Plus loin dans cet article, par souci de brièveté, nous dirons que quelque chose "existe" si ce n'est pas "null" et non "undefined".**
89
89
90
90
En d'autres termes, `value?.prop` :
91
+
91
92
- est identique à `value.prop` si `value` existe,
92
-
- sinon (lorsque `value` est `undefined/nul`), il renvoie `undefined`.
93
+
- sinon (lorsque `value` est `undefined`/`null`), il renvoie `undefined`.
93
94
94
95
Voici le moyen sûr d'accéder à `user.address.street` en utilisant `?.` :
95
96
96
97
```js run
97
98
let user = {}; // l'utilisateur n'a pas d'adresse
98
99
99
-
alert( user?.address?.street ); // undefined (no error)
Remarque: la syntaxe `?.`Rend facultative la valeur qui la précède, mais pas plus.
120
+
Remarque: la syntaxe `?.`rend facultative la valeur qui la précède, mais pas plus.
120
121
121
-
Par exemple. dans `user?.address.street.name` le `?.` permet à `user` d'être en toute sécurité `null/undefined` (et renvoie `undefined` dans ce cas), mais ce n'est que pour `user`. D'autres propriétés sont accessibles de manière régulière. Si nous voulons que certaines d'entre elles soient optionnelles, alors nous devrons remplacer plus de `.` par `?.`.
122
+
Par exemple, dans `user?.address.street.name` le `?.` permet à `user` d'être en toute sécurité `null`/`undefined` (et renvoie `undefined` dans ce cas), mais ce n'est que pour `user`. D'autres propriétés sont accessibles de manière régulière. Si nous voulons que certaines d'entre elles soient optionnelles, alors nous devrons remplacer plus de `.` par `?.`.
122
123
123
124
```warn header="N'abusez pas du chaînage optionnel"
124
125
Nous ne devrions utiliser `?.` que là où il est normal que quelque chose n'existe pas.
@@ -179,15 +180,15 @@ userAdmin.admin?.(); // I am admin
179
180
*/!*
180
181
181
182
*!*
182
-
userGuest.admin?.(); // nothing happens (no such method)
183
+
userGuest.admin?.(); // rien ne se passe (aucune méthode de ce nom)
183
184
*/!*
184
185
```
185
186
186
187
Ici, dans les deux lignes, nous utilisons d'abord le point (`userAdmin.admin`) pour obtenir la propriété `admin`, car nous supposons que l'objet `user` existe, il peut donc être lu en toute sécurité.
187
188
188
-
Puis `?.()`Vérifie la partie gauche : si la fonction `admin` existe, alors elle s'exécute (c'est le cas pour `userAdmin`). Sinon (pour `userGuest`) l'évaluation s'arrête sans erreur.
189
+
Puis `?.()`vérifie la partie gauche : si la fonction `admin` existe, alors elle s'exécute (c'est le cas pour `userAdmin`). Sinon (pour `userGuest`) l'évaluation s'arrête sans erreur.
189
190
190
-
La syntaxe `?.[]`Fonctionne également, si nous voulons utiliser des crochets `[]` pour accéder aux propriétés au lieu du point `.`. Similaire aux cas précédents, il permet de lire en toute sécurité une propriété à partir d'un objet qui peut ne pas exister.
191
+
La syntaxe `?.[]`fonctionne également, si nous voulons utiliser des crochets `[]` pour accéder aux propriétés au lieu du point `.`. Similaire aux cas précédents, il permet de lire en toute sécurité une propriété à partir d'un objet qui peut ne pas exister.
191
192
192
193
```js run
193
194
let key = "firstName";
@@ -224,13 +225,13 @@ Ce n'est tout simplement pas si intelligent.
224
225
225
226
## Résumé
226
227
227
-
Le chaînage optionnel '?.'A trois formes :
228
+
Le chaînage optionnel '?.'a trois formes :
228
229
229
230
1.`obj?.prop`-- retourne `obj.prop` si `obj` existe, sinon `undefined`.
230
231
2.`obj?.[prop]`-- retourne `obj[prop]` si `obj` existe, sinon `undefined`.
231
-
3.`obj?.method()`-- appel `obj.method()` si `obj.method` existe, sinon retourne `undefined`.
232
+
3.`obj.method?.()`-- appel `obj.method()` si `obj.method` existe, sinon retourne `undefined`.
232
233
233
-
Comme nous pouvons le voir, tous sont simples et simples à utiliser. Le`?.` vérifie la partie gauche pour `null/undefined` et permet à l'évaluation de se poursuivre si ce n'est pas le cas.
234
+
Comme nous pouvons le voir, tous sont simples et simples à utiliser. Le`?.` vérifie la partie gauche pour `null`/`undefined` et permet à l'évaluation de se poursuivre si ce n'est pas le cas.
234
235
235
236
Une chaîne de `?.` permet d'accéder en toute sécurité aux propriétés imbriquées.
0 commit comments