Skip to content

Commit 26bf141

Browse files
Minor fixes in '1-js/04-object-basics/07-optional-chaining/article.md'
1 parent b772c9b commit 26bf141

File tree

1 file changed

+18
-17
lines changed
  • 1-js/04-object-basics/07-optional-chaining

1 file changed

+18
-17
lines changed

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ Dans de nombreux cas pratiques, nous préférerions obtenir `undefined` au lieu
3232
let html = document.querySelector('.elem').innerHTML; // error if it's null
3333
```
3434

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.
3636

3737
Comment peut-on le faire ?
3838

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 :
4040

4141
```js
42-
let user = {};
42+
let user = {}; // l'utilisateur n'a pas d'adresse
4343

4444
alert(user.address ? user.address.street : undefined);
4545
```
4646

47-
Cela fonctionne, il n'y a pas d'erreur ... Mais c'est assez inélégant. Comme vous pouvez le voir, `"user.address"` apparaît deux fois dans le code.
47+
Cela fonctionne, il n'y a pas d'erreur... Mais c'est assez inélégant. Comme vous pouvez le voir, `"user.address"` apparaît deux fois dans le code.
4848

4949
Voici à quoi ressemblerait la même chose pour `document.querySelector` :
5050

@@ -76,9 +76,9 @@ alert( user.address && user.address.street && user.address.street.name ); // und
7676

7777
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.
7878

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.
8080

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 !
8282

8383

8484
## Chaînage optionnel
@@ -88,23 +88,24 @@ Le chaînage optionnel `?.` arrête l'évaluation si la valeur avant `?.` est `u
8888
**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".**
8989

9090
En d'autres termes, `value?.prop` :
91+
9192
- 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`.
9394

9495
Voici le moyen sûr d'accéder à `user.address.street` en utilisant `?.` :
9596

9697
```js run
9798
let user = {}; // l'utilisateur n'a pas d'adresse
9899

99-
alert( user?.address?.street ); // undefined (no error)
100+
alert( user?.address?.street ); // undefined (pas d'erreur)
100101
```
101102
102103
Le code est court et propre, il n'y a aucune duplication.
103104
104105
Voici un exemple avec `document.querySelector` :
105106
106107
```js run
107-
let html = document.querySelector('.elem')?.innerHTML; // will be undefined, if there's no element
108+
let html = document.querySelector('.elem')?.innerHTML; // sera undefined s'il n'y a pas d'élément
108109
```
109110
110111
La lecture de l'adresse avec `user?.address` fonctionne même si l'objet `user` n'existe pas :
@@ -116,9 +117,9 @@ alert( user?.address ); // undefined
116117
alert( user?.address.street ); // undefined
117118
```
118119
119-
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.
120121
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 `?.`.
122123
123124
```warn header="N'abusez pas du chaînage optionnel"
124125
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
179180
*/!*
180181
181182
*!*
182-
userGuest.admin?.(); // nothing happens (no such method)
183+
userGuest.admin?.(); // rien ne se passe (aucune méthode de ce nom)
183184
*/!*
184185
```
185186

186187
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é.
187188

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.
189190

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.
191192
192193
```js run
193194
let key = "firstName";
@@ -224,13 +225,13 @@ Ce n'est tout simplement pas si intelligent.
224225

225226
## Résumé
226227

227-
Le chaînage optionnel '?.' A trois formes :
228+
Le chaînage optionnel '?.' a trois formes :
228229

229230
1. `obj?.prop` -- retourne `obj.prop` si `obj` existe, sinon `undefined`.
230231
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`.
232233

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.
234235

235236
Une chaîne de `?.` permet d'accéder en toute sécurité aux propriétés imbriquées.
236237

0 commit comments

Comments
 (0)