Skip to content

Commit 28870bf

Browse files
authored
Merge pull request #1 from javascript-tutorial/master
Pull request last update
2 parents e031f7b + bbed583 commit 28870bf

File tree

61 files changed

+375
-315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+375
-315
lines changed

1-js/02-first-steps/12-while-for/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ Mais nous pouvons forcer la sortie à tout moment. Il y a une directive spécial
212212

213213
Par exemple, la boucle ci-dessous demande à l'utilisateur une série de chiffres, mais "se casse" quand aucun numéro n'est entré :
214214

215-
```js
215+
```js run
216216
let sum = 0;
217217

218218
while (true) {

1-js/02-first-steps/15-function-expressions-arrows/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ welcome(); // ok maintenant
352352
```smart header="Quand choisir la fonction déclaration par rapport à la fonction expression ?"
353353
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.
354354
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".
356356
357357
… 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.
358358
```

1-js/04-object-basics/04-object-methods/3-why-this/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 3
44

55
# Expliquez la valeur de "this"
66

7-
Dans le code ci-dessous, nous avons l'intention d'appeler la méthode `user.go()` 4 fois de suite.
7+
Dans le code ci-dessous, nous avons l'intention d'appeler la méthode `obj.go()` 4 fois de suite.
88

99
Mais les appels `(1)` et `(2)` fonctionnent différemment de `(3)` et `(4)`. Pourquoi ?
1010

1-js/04-object-basics/05-object-toprimitive/article.md

Lines changed: 67 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,27 @@ let greater = user1 > user2;
5353
`"default"`
5454
: Se produit dans de rares cas où l'opérateur n'est "pas sûr" du type auquel il doit s'attendre.
5555

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

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é.
6159

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+
```
6567

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"`. Cest 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,
6769

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

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+
```
7177
7278
**Pour effectuer la conversion, JavaScript essaie de trouver et d'appeler trois méthodes d'objet :**
7379
@@ -119,7 +125,29 @@ S'il n'y a pas de `Symbol.toPrimitive`, alors JavaScript essaye de les trouver e
119125
- `toString -> valueOf` pour le hint "string".
120126
- `valueOf -> toString` sinon.
121127

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` :
123151

124152
```js run
125153
let user = {
@@ -166,7 +194,7 @@ En l'absence de `Symbol.toPrimitive` et de `valueOf`, `toString` gérera toutes
166194

167195
La chose importante à savoir sur toutes les méthodes de conversion de primitives est qu'elles ne renvoient pas nécessairement la primitive "hinted".
168196

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"`.
170198

171199
**La seule chose obligatoire : ces méthodes doivent renvoyer une primitive, pas un objet.**
172200

@@ -176,35 +204,41 @@ Pour des raisons historiques, si `toString` ou `valueOf` renvoie un objet, il n
176204
En revanche, `Symbol.toPrimitive` doit renvoyer une primitive, sinon une erreur se produira.
177205
```
178206

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

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

183215
Par exemple :
184216

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+
};
186224

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+
```
194227

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).
197230

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

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
241+
```
208242

209243
## Résumé
210244

1-js/05-data-types/03-string/article.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ Il existe 3 méthodes en JavaScript pour obtenir un substring : `substring`, `su
398398

399399
```js run
400400
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
402402
```
403403

404404
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
407407
let str = "strin*!*gif*/!*y";
408408

409409
// 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'
411411
```
412412

413413
`str.substring(start [, end])`
@@ -439,14 +439,14 @@ Il existe 3 méthodes en JavaScript pour obtenir un substring : `substring`, `su
439439

440440
```js run
441441
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
443443
```
444444

445445
Le premier argument peut être négatif, pour compter à partir de la fin :
446446

447447
```js run
448448
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
450450
```
451451

452452
Récapitulons ces méthodes pour éviter toute confusion :

1-js/05-data-types/05-array-methods/4-sort-back/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ importance: 4
22

33
---
44

5-
# Trier dans l'ordre inverse
5+
# Trier par ordre décroissant
66

77
```js
88
let arr = [5, 2, 1, -10, 8];
99

10-
// ... votre code pour le trier dans l'ordre inverse
10+
// ... votre code pour le trier par ordre décroissant
1111

1212
alert( arr ); // 8, 5, 2, 1, -10
1313
```
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11

22
- Please note how methods are stored. They are simply added to `this.methods` property.
33
- All tests and numeric conversions are done in the `calculate` method. In future it may be extended to support more complex expressions.
4-
5-
[js src="_js/solution.js"]

1-js/05-data-types/05-array-methods/article.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ C'est normal, car `delete obj.key` supprime une valeur par la` clé`. C'est tout
3636

3737
Des méthodes spéciales doivent donc être utilisées.
3838

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

4141
La syntaxe est la suivante:
4242

@@ -270,7 +270,7 @@ alert( arr.includes(NaN) );// true (correct)
270270

271271
Imaginez que nous ayons un tableau d'objets. Comment pouvons-nous trouver un objet avec la condition spécifique?
272272

273-
Ici la méthode [arr.find](mdn:js/Array/find) se révèle vraiment pratique.
273+
Ici la méthode [arr.find(fn)](mdn:js/Array/find) se révèle vraiment pratique.
274274

275275
La syntaxe est la suivante:
276276
```js
@@ -577,7 +577,7 @@ Le flux de calcul:
577577

578578
Ou sous la forme d'un tableau, où chaque ligne représente un appel de fonction sur l'élément de tableau suivant:
579579

580-
| |`sum`|`current`|`result`|
580+
| |`sum`|`current`|result|
581581
|---|-----|---------|---------|
582582
|premier appel|`0`|`1`|`1`|
583583
|deuxième appel|`1`|`2`|`3`|

1-js/05-data-types/06-iterable/article.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,17 @@ for (let char of str) {
142142

143143
Pour mieux comprendre, voyons comment utiliser explicitement un itérateur.
144144

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":
146146

147147
```js run
148148
let str = "Hello";
149149

150150
// fait la même chose que
151151
// for (let char of str) alert(char);
152152

153+
*!*
153154
let iterator = str[Symbol.iterator]();
155+
*/!*
154156

155157
while (true) {
156158
let result = iterator.next();

1-js/05-data-types/09-keys-values-entries/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Ils sont pris en charge par:
1010

1111
- `Map`
1212
- `Set`
13-
- `Array` (sauf `arr.values()`)
13+
- `Array`
1414

1515
Les objets simples prennent également en charge des méthodes similaires, mais la syntaxe est un peu différente.
1616

0 commit comments

Comments
 (0)