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/02-first-steps/12-nullish-coalescing-operator/article.md
+13-63Lines changed: 13 additions & 63 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,28 +2,17 @@
2
2
3
3
[recent browser="new"]
4
4
5
-
<<<<<<< HEAD
6
-
Ici, dans cet article, nous dirons qu'une expression est `defined` lorsqu'elle n'est ni `null` ni `undefined`.
7
5
8
6
L'opérateur de coalescence des nuls est écrit sous la forme de deux points d'interrogation `??`.
9
7
8
+
Comme il traite `null` et `undefined` de la même manière, nous utiliserons un terme spécial ici, dans cet article. Nous dirons qu'une expression est "définie" lorsqu'elle n'est ni `null` ni `undefined`.
9
+
10
10
Le résultat de `a ?? b` est :
11
11
- si `a` est défini, alors `a`,
12
12
- si `a` n'est pas défini, alors `b`.
13
13
14
14
15
15
En d'autres termes, `??` renvoie le premier argument s'il n'est pas `nul/undefined`. Sinon, le second.
16
-
=======
17
-
The nullish coalescing operator is written as two question marks `??`.
18
-
19
-
As it treats `null` and `undefined` similarly, we'll use a special term here, in this article. We'll say that an expression is "defined" when it's neither `null` nor `undefined`.
20
-
21
-
The result of `a ?? b` is:
22
-
- if `a` is defined, then `a`,
23
-
- if `a` isn't defined, then `b`.
24
-
25
-
In other words, `??` returns the first argument if it's not `null/undefined`. Otherwise, the second one.
26
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
27
16
28
17
L'opérateur de coalescence des nuls n'est pas complètement nouveau. C'est juste une belle syntaxe pour obtenir la première valeur "defined" des deux.
29
18
@@ -33,29 +22,19 @@ Nous pouvons réécrire `result = a ?? b` en utilisant les opérateurs que nous
33
22
result = (a !==null&& a !==undefined) ? a : b;
34
23
```
35
24
36
-
<<<<<<< HEAD
37
-
Le cas d'utilisation courant de `??` est de fournir une valeur par défaut pour une variable potentiellement indéfinie.
38
-
39
-
Par exemple, ici nous montrons `Anonymous` si `user` n'est pas défini :
40
-
=======
41
-
Now it should be absolutely clear what `??` does. Let's see where it helps.
25
+
Maintenant, il devrait être absolument clair ce que fait `??`. Voyons où cela aide.
42
26
43
-
The common use case for`??`is to provide a default value for a potentially undefined variable.
27
+
Le cas d'utilisation courant de`??`est de fournir une valeur par défaut pour une variable potentiellement indéfinie.
44
28
45
-
For example, here we show `user` if defined, otherwise `Anonymous`:
46
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
29
+
Par exemple, ici nous affichons `user` s'il est défini, sinon `Anonymous` :
47
30
48
31
```js run
49
32
let user;
50
33
51
34
alert(user ??"Anonymous"); // Anonymous (user not defined)
52
35
```
53
36
54
-
<<<<<<< HEAD
55
-
Bien sûr, si `user` avait une valeur à l'exception de `null/undefined`, alors nous la verrions à la place :
56
-
=======
57
-
Here's the example with `user` assigned to a name:
Nous pouvons également utiliser une séquence de `??` pour sélectionner la première valeur dans une liste qui n'est pas `null/undefined`.
67
46
68
-
<<<<<<< HEAD
69
47
Disons que nous avons les données d'un utilisateur dans les variables `firstName`, `lastName` ou `nickName`. Tous peuvent être indéfinis, si l'utilisateur décide de ne pas entrer de valeur.
70
48
71
49
Nous aimerions afficher le nom d'utilisateur en utilisant l'une de ces variables, ou afficher "Anonymous" si toutes ne sont pas définies.
72
-
=======
73
-
Let's say we have a user's data in variables `firstName`, `lastName` or `nickName`. All of them may be not defined, if the user decided not to enter a value.
74
-
75
-
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them aren't defined.
L'opérateur OR `||` existe depuis le début de JavaScript, donc les développeurs l'utilisaient à de telles fins depuis longtemps.
109
-
=======
110
-
Historically, the OR `||` operator was there first. It exists since the beginning of JavaScript, so developers were using it for such purposes for a long time.
111
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
80
+
Historiquement, l'opérateur OR `||` était là en premier. Il existe depuis le début de JavaScript, donc les développeurs l'utilisaient à de telles fins depuis longtemps.
112
81
113
82
D'un autre côté, l'opérateur de coalescence des nuls `??` n'a été ajouté à JavaScript que récemment, et la raison en était que les gens n'étaient pas tout à fait satisfaits de `||`.
114
83
@@ -129,33 +98,18 @@ alert(height || 100); // 100
129
98
alert(height ??100); // 0
130
99
```
131
100
132
-
<<<<<<< HEAD
133
-
- L'expression `height ||100` vérifie que "height" est une valeur erronée, et c'est vraiment le cas,
134
-
- donc le résultat est le deuxième argument, `100`.
101
+
- L'expression `height ||100` vérifie que `height` est une valeur fausse, et c'est `0`, elle est fausse en effet.
102
+
- donc le résultat de `||` est le deuxième argument, `100`.
135
103
- L'expression `height ??100` vérifie que `height` est `null/undefined`, et ce n'est pas le cas,
136
104
- donc le résultat est `height` "tel quel", c'est-à-dire `0`.
137
105
138
-
Si la hauteur zéro est une valeur valide, elle ne doit pas être remplacée par la valeur par défaut, alors`??` fait exactement ce qu'il faut.
106
+
En pratique, la hauteur zéro est souvent une valeur valide, qui ne doit pas être remplacée par la valeur par défaut. Alors`??` fait ce qu'il faut.
139
107
140
108
## Priorité
141
-
=======
142
-
- The `height ||100` checks `height` for being a falsy value, and it's `0`, falsy indeed.
143
-
- so the result of `||` is the second argument, `100`.
144
-
- The `height ??100` checks `height` for being `null/undefined`, and it's not,
145
-
- so the result is `height` "as is", that is `0`.
146
-
147
-
In practice, the zero height is often a valid value, that shouldn't be replaced with the default. So `??` does just the right thing.
148
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
149
-
150
-
La priorité de l'opérateur `??` est plutôt faible : `5` dans le [tableau MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
151
109
152
-
<<<<<<< HEAD
153
-
La priorité de l'opérateur «??» est plutôt faible: «5» dans le [tableau MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). Ainsi, `??` est évalué avant `=` et `?`, Mais après la plupart des autres opérations, telles que `+`, `*`.
154
-
=======
155
-
The precedence of the `??` operator is about the same as `||`, just a bit lower. It equals `5` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), while `||` is `6`.
110
+
La priorité de l'opérateur `??` est à peu près la même que celle de `||`, juste un peu plus basse. Il est égal à `5` dans le [tableau MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), tandis que `||` est `6`.
156
111
157
-
That means that, just like `||`, the nullish coalescing operator `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
158
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
112
+
Cela signifie que, tout comme `||`, l'opérateur de coalescence des nuls `??` est évalué avant `=` et `?`, Mais après la plupart des autres opérations, telles que `+`, `*`.
159
113
160
114
Donc, si nous voulons choisir une valeur avec `??` dans une expression avec d'autres opérateurs, pensez à ajouter des parenthèses :
161
115
@@ -189,11 +143,7 @@ Le code ci-dessous déclenche une erreur de syntaxe :
189
143
let x =1&&2??3; // Syntax error
190
144
```
191
145
192
-
<<<<<<< HEAD
193
-
La limitation est sûrement discutable, mais elle a été ajoutée à la spécification du langage dans le but d'éviter les erreurs de programmation, car les gens commencent à passer à `??` à partir de `||`.
194
-
=======
195
-
The limitation is surely debatable, it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch from `||` to `??`.
196
-
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
146
+
La limitation est sûrement discutable, mais elle a été ajoutée à la spécification du langage dans le but d'éviter les erreurs de programmation, quand les gens commencent à passer de `||` à `??`.
197
147
198
148
Utilisez des parenthèses explicites pour la contourner :
0 commit comments