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/15-function-expressions-arrows/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -352,7 +352,7 @@ welcome(); // ok maintenant
352
352
```smart header="Quand choisir la fonction déclaration par rapport à la fonction expression ?"
353
353
En règle générale, lorsque nous devons déclarer une fonction, la première chose à prendre en compte est la syntaxe de la fonction déclaration, celle que nous utilisions auparavant. Cela donne plus de liberté dans l'organisation de notre code, car nous pouvons appeler de telles fonctions avant qu'elles ne soient déclarées.
354
354
355
-
C’est également meilleur pour la lisibilité, car il est plus facile de rechercher la `fonction f(…) {…}` dans le code que `let f = function(…) {…}`. Les fonction déclarations sont plus "accrocheuses".
355
+
C’est également meilleur pour la lisibilité, car il est plus facile de rechercher la `fonction f(…) {…}` dans le code que `let f = function(…) {…};`. Les fonction déclarations sont plus "accrocheuses".
356
356
357
357
… Mais si une déclaration de fonction ne nous convient pas pour une raison quelconque (nous en avons vu un exemple ci-dessus), alors il convient d'utiliser une Fonction Expression.
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/05-object-toprimitive/article.md
+67-33Lines changed: 67 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,21 +53,27 @@ let greater = user1 > user2;
53
53
`"default"`
54
54
: Se produit dans de rares cas où l'opérateur n'est "pas sûr" du type auquel il doit s'attendre.
55
55
56
-
Par exemple, le binaire plus `+` peut fonctionner à la fois avec des chaînes de caractères (les concaténer) et des nombres (les ajouter). Ou quand un objet est comparé en utilisant `==` avec une chaîne, un numéro ou un symbole, il est également difficile de savoir quelle conversation doit être faite.
56
+
Par exemple, le binaire plus `+` peut fonctionner à la fois avec des chaînes de caractères (les concaténer) et des nombres (les ajouter), donc les chaînes de caractères et les chiffres feraient l'affaire. Donc, si le plus binaire obtient un objet sous forme d'argument, il utilise l'indicateur `"default"` pour le convertir.
57
57
58
-
```js
59
-
// binary plus
60
-
let total = car1 + car2;
58
+
En outre, si un objet est comparé à l'aide de `==` avec une chaîne de caractères, un nombre ou un symbole, il est également difficile de savoir quelle conversion doit être effectuée, par conséquent l'indicateur `"default"` est utilisé.
61
59
62
-
// obj == string/number/symbol
63
-
if (user ==1) { ... };
64
-
```
60
+
```js
61
+
// binary plus uses the "default" hint
62
+
let total = obj1 + obj2;
63
+
64
+
// obj == number uses the "default" hint
65
+
if (user == 1) { ... };
66
+
```
65
67
66
-
L'opérateur supérieur / inférieur `<>` peut également utiliser des chaînes de caractères et des nombres. Néanmoins, il utilise un indice `"number"` non `"default"`. C’est pour des raisons historiques.
68
+
Les opérateurs de comparaison supérieurs et inférieurs, tels que `<` `>`, peuvent également fonctionner avec des chaînes de caractères et des nombres. Néanmoins, ils utilisent l'indicateur `"number"`, pas `default`. C'est pour des raisons historiques,
67
69
68
-
En pratique, tous les objets intégrés, à l'exception d'un cas (l'objet `Date`, nous l'apprendrons plus tard) implémentent la conversion `"default"` de la même manière que `"number"`. Et probablement nous devrions faire la même chose.
70
+
En pratique cependant, nous n'avons pas besoin de nous souvenir de ces détails particuliers, car tous les objets intégrés, à l'exception d'un cas (l'objet `Date`, nous l'apprendrons plus tard), implémentent la conversion `'default'` de la même manière que `"number"`. Et nous pouvons faire la même chose.
69
71
70
-
Veuillez noter qu'il n'y a que trois "hints" ("indices"). C'est simple. Il n'y a pas d'indice "booléen" (tous les objets sont vrais dans un contexte booléen) ou autre chose. Et si nous traitons `"default"` et `"number"` de la même manière, comme le font la plupart des programmes intégrés, il n'y a que deux conversions.
72
+
```smart header="Pas d'indice `\"boolean\"`"
73
+
Veuillez noter qu'il n'y a que trois indices. C'est aussi simple que cela.
74
+
75
+
Il n'y a pas d'indice "boolean" (tous les objets sont `true` dans un contexte booléen) ou autre chose. Et si nous traitons de la même manière `'default'` et `'number'`, comme le font la plupart des programmes intégrés, il n'y a au final que deux conversions.
76
+
```
71
77
72
78
**Pour effectuer la conversion, JavaScript essaie de trouver et d'appeler trois méthodes d'objet :**
73
79
@@ -119,7 +125,29 @@ S'il n'y a pas de `Symbol.toPrimitive`, alors JavaScript essaye de les trouver e
119
125
-`toString -> valueOf` pour le hint "string".
120
126
-`valueOf -> toString` sinon.
121
127
122
-
Par exemple, ici `user` fait la même chose que ci-dessus en combinant `toString` et `valueOf` :
128
+
Ces méthodes doivent renvoyer une valeur primitive. Si `toString` ou `valueOf` renvoie un objet, il est ignoré (comme s'il n'y avait pas de méthode).
129
+
130
+
Par défaut, un objet brut a les méthodes `toString` et `valueOf` suivantes :
131
+
132
+
- La méthode `toString` renvoie une chaîne de caractères `"[object Object]"`.
133
+
- La méthode `valueOf` renvoie un objet.
134
+
135
+
Voici la démo :
136
+
137
+
```js run
138
+
let user = {name:"John"};
139
+
140
+
alert(user); // [object Object]
141
+
alert(user.valueOf() === user); // true
142
+
```
143
+
144
+
Donc, si nous essayons d'utiliser un objet en tant que chaîne de caractères, comme dans un `alert` ou autre chose, nous voyons par défaut `[object Object]`.
145
+
146
+
Et la valeur par défaut `valueOf` n'est mentionnée ici que par souci d'exhaustivité, afin d'éviter toute confusion. Comme vous pouvez le constater, l'objet est renvoyé et est donc ignoré. Ne me demandez pas pourquoi, c'est pour des raisons historiques. Nous pouvons donc supposer que cela n'existe pas.
147
+
148
+
Implémentons ces méthodes.
149
+
150
+
Par exemple, ici, `user` fait la même chose que ci-dessus en combinant `toString` et `valueOf` au lieu de `Symbol.toPrimitive` :
123
151
124
152
```js run
125
153
let user = {
@@ -166,7 +194,7 @@ En l'absence de `Symbol.toPrimitive` et de `valueOf`, `toString` gérera toutes
166
194
167
195
La chose importante à savoir sur toutes les méthodes de conversion de primitives est qu'elles ne renvoient pas nécessairement la primitive "hinted".
168
196
169
-
Il n'y a pas de control pour vérifier si `ToString()` renvoie exactement une chaîne de caractères ou si la méthode `Symbol.toPrimitive` renvoie un nombre pour un indice "number".
197
+
Il n'y a pas de control pour vérifier si `ToString()` renvoie exactement une chaîne de caractères ou si la méthode `Symbol.toPrimitive` renvoie un nombre pour un indice `"number"`.
170
198
171
199
**La seule chose obligatoire : ces méthodes doivent renvoyer une primitive, pas un objet.**
172
200
@@ -176,35 +204,41 @@ Pour des raisons historiques, si `toString` ou `valueOf` renvoie un objet, il n
176
204
En revanche, `Symbol.toPrimitive` doit renvoyer une primitive, sinon une erreur se produira.
177
205
```
178
206
179
-
## Autres opérations
207
+
## Autres conversions
208
+
209
+
Comme nous le savons déjà, de nombreux opérateurs et fonctions effectuent des conversions de types, par exemple la multiplication `*` convertit les opérandes en nombres.
180
210
181
-
Une opération qui a initié la conversion obtient cette primitive, puis continue à travailler avec elle, en appliquant d'autres conversions si nécessaire.
211
+
Si nous passons un objet en argument, il y a deux étapes :
212
+
1. L'objet est converti en primitive (en utilisant les règles décrites ci-dessus).
213
+
2. Si la primitive résultante n'est pas du bon type, elle est convertie.
182
214
183
215
Par exemple :
184
216
185
-
- Les opérations mathématiques, sauf binaire plus, convertissent la primitive en nombre :
217
+
```js run
218
+
let obj = {
219
+
// toString gère toutes les conversions en l'absence d'autres méthodes
220
+
toString() {
221
+
return"2";
222
+
}
223
+
};
186
224
187
-
```js run
188
-
let obj = {
189
-
// toString gère toutes les conversions en l'absence d'autres méthodes
190
-
toString() {
191
-
return"2";
192
-
}
193
-
};
225
+
alert(obj *2); // 4, objet converti en primitive "2", puis la multiplication le transforme en un nombre
226
+
```
194
227
195
-
alert(obj *2); // 4, objet converti en primitive "2", puis multiplié par un nombre
196
-
```
228
+
1. La multiplication `obj * 2` convertit d'abord l'objet en primitive (cela devient une chaîne de caractère `"2"`).
229
+
2. Ensuite `"2" * 2` devient `2 * 2` (la chaîne de caractères est convertie en nombre).
197
230
198
-
- Le binaire plus va concaténer des chaînes dans la même situation :
199
-
```js run
200
-
let obj = {
201
-
toString() {
202
-
return "2";
203
-
}
204
-
};
231
+
Le binaire plus va concaténer des chaînes de caractères dans la même situation, car il accepte volontiers une chaîne de caractères :
205
232
206
-
alert(obj + 2); // 22 (la conversion en primitive a renvoyé une chaîne de caractères => concaténation)
207
-
```
233
+
```js run
234
+
let obj = {
235
+
toString() {
236
+
return"2";
237
+
}
238
+
};
239
+
240
+
alert(obj +2); // 22 ("2" + 2), la conversion en primitive a renvoyé une chaîne de caractères => concaténation
Copy file name to clipboardExpand all lines: 1-js/05-data-types/03-string/article.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -398,7 +398,7 @@ Il existe 3 méthodes en JavaScript pour obtenir un substring : `substring`, `su
398
398
399
399
```js run
400
400
let str = "st*!*ringify*/!*";
401
-
alert( str.slice(2) ); // ringify, à partir de la 2e position jusqu'à la fin
401
+
alert( str.slice(2) ); // 'ringify', à partir de la 2e position jusqu'à la fin
402
402
```
403
403
404
404
Des valeurs négatives pour `start/end` sont également possibles. Elles veulent dire que la position est comptée à partir de la fin de la chaîne de caractères :
@@ -407,7 +407,7 @@ Il existe 3 méthodes en JavaScript pour obtenir un substring : `substring`, `su
407
407
let str = "strin*!*gif*/!*y";
408
408
409
409
// commence à la 4ème position à partir de la droite, se termine au 1er à partir de la droite
410
-
alert( str.slice(-4, -1) ); // gif
410
+
alert( str.slice(-4, -1) ); // 'gif'
411
411
```
412
412
413
413
`str.substring(start [, end])`
@@ -439,14 +439,14 @@ Il existe 3 méthodes en JavaScript pour obtenir un substring : `substring`, `su
439
439
440
440
```js run
441
441
let str = "st*!*ring*/!*ify";
442
-
alert( str.substr(2, 4) ); // ring, à partir de la 2ème position on obtient 4 caractères
442
+
alert( str.substr(2, 4) ); // 'ring', à partir de la 2ème position on obtient 4 caractères
443
443
```
444
444
445
445
Le premier argument peut être négatif, pour compter à partir de la fin :
446
446
447
447
```js run
448
448
let str = "strin*!*gi*/!*fy";
449
-
alert( str.substr(-4, 2) ); // gi, à partir de la 4ème position on obtient 2 caractères
449
+
alert( str.substr(-4, 2) ); // 'gi', à partir de la 4ème position on obtient 2 caractères
450
450
```
451
451
452
452
Récapitulons ces méthodes pour éviter toute confusion :
Copy file name to clipboardExpand all lines: 1-js/05-data-types/05-array-methods/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,7 +36,7 @@ C'est normal, car `delete obj.key` supprime une valeur par la` clé`. C'est tout
36
36
37
37
Des méthodes spéciales doivent donc être utilisées.
38
38
39
-
La méthode [arr.splice(str)](mdn:js/Array/splice) est un couteau suisse pour les tableaux. Elle peut tout faire : ajouter, supprimer et remplacer des éléments.
39
+
La méthode [arr.splice(start)](mdn:js/Array/splice) est un couteau suisse pour les tableaux. Elle peut tout faire : ajouter, supprimer et remplacer des éléments.
Copy file name to clipboardExpand all lines: 1-js/05-data-types/06-iterable/article.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -142,15 +142,17 @@ for (let char of str) {
142
142
143
143
Pour mieux comprendre, voyons comment utiliser explicitement un itérateur.
144
144
145
-
Nous allons parcourir une chaîne de caractères de la même manière que `for..of`, mais avec des appels directs. Ce code obtient un itérateur de chaîne de caractères et en récupère la valeur "manuellement":
145
+
Nous allons parcourir une chaîne de caractères de la même manière que `for..of`, mais avec des appels directs. Ce code crée un itérateur de chaîne de caractères et en récupère la valeur "manuellement":
0 commit comments