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/01-getting-started/2-manuals-specifications/article.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,11 @@ Une nouvelle version de la spécification est publiée chaque année. La derniè
12
12
13
13
Pour en savoir plus sur les fonctionnalités à venir, y compris celles qui sont "presque standards" (appelées aussi "stage 3"), vous pouvez consulter les propositions à cette adresse : <https://github.com/tc39/proposals>.
14
14
15
+
<<<<<<< HEAD
15
16
Si vous développez spécifiquement pour le navigateur, il existe d’autres spécifications couvertes dans la [seconde partie](info:browser-environment) du tutoriel.
17
+
=======
18
+
Also, if you're developing for the browser, then there are other specifications covered in the [second part](info:browser-environment) of the tutorial.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/11-logical-operators/article.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,10 @@
1
1
# Opérateurs logiques
2
2
3
+
<<<<<<< HEAD
3
4
Il y a trois opérateurs logiques en JavaScript : `||` (OR), `&&` (AND), `!` (NOT).
5
+
=======
6
+
There are four logical operators in JavaScript: `||` (OR), `&&` (AND), `!` (NOT), `??` (Nullish Coalescing). Here we cover the first three, the `??` operator is in the next article.
7
+
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
4
8
5
9
Bien qu'ils soient appelés "logiques", ils peuvent être appliqués à des valeurs de tout type, pas seulement booléennes. Le résultat peut également être de tout type.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/article.md
+55-2Lines changed: 55 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
3
3
[recent browser="new"]
4
4
5
+
<<<<<<< HEAD
5
6
Ici, dans cet article, nous dirons qu'une expression est `defined` lorsqu'elle n'est ni `null` ni `undefined`.
6
7
7
8
L'opérateur de coalescence des nuls est écrit sous la forme de deux points d'interrogation `??`.
@@ -12,6 +13,17 @@ Le résultat de `a ?? b` est :
12
13
13
14
14
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
15
27
16
28
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.
17
29
@@ -21,29 +33,47 @@ Nous pouvons réécrire `result = a ?? b` en utilisant les opérateurs que nous
21
33
result = (a !==null&& a !==undefined) ? a : b;
22
34
```
23
35
36
+
<<<<<<< HEAD
24
37
Le cas d'utilisation courant de `??` est de fournir une valeur par défaut pour une variable potentiellement indéfinie.
25
38
26
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.
42
+
43
+
The common use case for `??` is to provide a default value for a potentially undefined variable.
44
+
45
+
For example, here we show `user` if defined, otherwise `Anonymous`:
46
+
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
27
47
28
48
```js run
29
49
let user;
30
50
31
-
alert(user ??"Anonymous"); // Anonymous
51
+
alert(user ??"Anonymous"); // Anonymous (user not defined)
32
52
```
33
53
54
+
<<<<<<< HEAD
34
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:
58
+
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
35
59
36
60
```js run
37
61
let user ="John";
38
62
39
-
alert(user ??"Anonymous"); // John
63
+
alert(user ??"Anonymous"); // John (user defined)
40
64
```
41
65
42
66
Nous pouvons également utiliser une séquence de `??` pour sélectionner la première valeur dans une liste qui n'est pas `null/undefined`.
43
67
68
+
<<<<<<< HEAD
44
69
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.
45
70
46
71
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
78
112
79
113
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 `||`.
80
114
@@ -95,6 +129,7 @@ alert(height || 100); // 100
95
129
alert(height ??100); // 0
96
130
```
97
131
132
+
<<<<<<< HEAD
98
133
- L'expression `height ||100` vérifie que "height" est une valeur erronée, et c'est vraiment le cas,
99
134
- donc le résultat est le deuxième argument, `100`.
100
135
- L'expression `height ??100` vérifie que `height` est `null/undefined`, et ce n'est pas le cas,
@@ -103,10 +138,24 @@ alert(height ?? 100); // 0
103
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.
104
139
105
140
## 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
106
149
107
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).
108
151
152
+
<<<<<<< HEAD
109
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`.
156
+
157
+
That means that, just like `||`, the nullish coalescing operator `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
158
+
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
110
159
111
160
Donc, si nous voulons choisir une valeur avec `??` dans une expression avec d'autres opérateurs, pensez à ajouter des parenthèses :
112
161
@@ -140,7 +189,11 @@ Le code ci-dessous déclenche une erreur de syntaxe :
140
189
let x =1&&2??3; // Syntax error
141
190
```
142
191
192
+
<<<<<<< HEAD
143
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
144
197
145
198
Utilisez des parenthèses explicites pour la contourner :
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/02-object-copy/article.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -187,7 +187,13 @@ let clone = Object.assign({}, user);
187
187
188
188
Cela copie toutes les propriétés de `user` dans l'objet vide et le retourne.
189
189
190
+
<<<<<<< HEAD
190
191
## Clonage imbriqué
192
+
=======
193
+
There are also other methods of cloning an object, e.g. using the [spread operator](info:rest-parameters-spread) `clone = {...user}`, covered later in the tutorial.
194
+
195
+
## Nested cloning
196
+
>>>>>>> 7533c719fbf62ba57188d6d51fe4c038b282bd0c
191
197
192
198
Jusqu'à maintenat on suppose que toutes les propriétés de `use` sont des primitives. Mais les propriétés peuvent être des références vers d'autres objets. Comment gèrer ces cas-là ?
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/07-optional-chaining/article.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -175,9 +175,15 @@ userGuest.admin?.(); // nothing (no such method)
175
175
*/!*
176
176
```
177
177
178
+
<<<<<<<HEAD
178
179
179
180
Ici, dans les deux lignes, nous utilisons d'abord le point (`user1.admin`) pour obtenir la propriété `admin`, car l'objet utilisateur doit exister, donc il peut être lu en toute sécurité.
180
181
Puis `?.()`Vérifie la partie gauche : si la fonction admin existe, alors elle s'exécute (c'est le cas pour `user1`). Sinon (pour `user2`) l'évaluation s'arrête sans erreur.
182
+
=======
183
+
Here, in both lines we first use the dot (`userAdmin.admin`) to get `admin` property, because we assume that the user object exists, so it's safe read from it.
184
+
185
+
Then `?.()` checks the left part: if the admin function exists, then it runs (that's so for`userAdmin`). Otherwise (for`userGuest`) the evaluation stops without errors.
186
+
>>>>>>>7533c719fbf62ba57188d6d51fe4c038b282bd0c
181
187
182
188
183
189
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.
0 commit comments