Skip to content

Commit df81c6e

Browse files
authored
Merge pull request #319 from javascript-tutorial/sync-4d01fc20
Sync with upstream @ 4d01fc2
2 parents bec9e04 + e42c69e commit df81c6e

File tree

29 files changed

+483
-24
lines changed

29 files changed

+483
-24
lines changed

1-js/02-first-steps/04-variables/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ Maintenant, nous pouvons y mettre des données en utilisant l'opérateur d'affec
2424
let message;
2525

2626
*!*
27+
<<<<<<< HEAD
2728
message = 'Hello'; // stocke la chaîne de caractères
29+
=======
30+
message = 'Hello'; // store the string 'Hello' in the variable named message
31+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
2832
*/!*
2933
```
3034

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,21 @@ for (let i = 0; i < 3; i++) { // affiche 0, puis 1, puis 2
104104

105105
Examinons la déclaration `for` partie par partie :
106106

107+
<<<<<<< HEAD
107108
| partie | | |
108109
|-----------|------------|----------------------------------------------------------------------------------------|
109110
| début | `i = 0` | Exécute une fois en entrant dans la boucle. |
110111
| condition | `i < 3` | Vérifié avant chaque itération de la boucle, en cas d'échec, la boucle s'arrête. |
111112
| corps | `alert(i)` | Exécute encore et encore tant que la condition est vraie |
112113
| étape | `i++` | Exécute après le corps à chaque itération, mais avant la vérification de la condition. |
114+
=======
115+
| part | | |
116+
|-------|----------|----------------------------------------------------------------------------|
117+
| begin | `let i = 0` | Executes once upon entering the loop. |
118+
| condition | `i < 3`| Checked before every loop iteration. If false, the loop stops. |
119+
| body | `alert(i)`| Runs again and again while the condition is truthy. |
120+
| step| `i++` | Executes after the body on each iteration. |
121+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
113122
114123

115124
L'algorithme de boucle général fonctionne comme ceci :
@@ -381,7 +390,11 @@ label: {
381390
}
382391
```
383392
393+
<<<<<<< HEAD
384394
... Bien que 99,9% du temps les `break` utilisés sont à l'intérieur de boucles, comme nous l'avons vu dans les exemples ci-dessus.
395+
=======
396+
...Although, 99.9% of the time `break` is used inside loops, as we've seen in the examples above.
397+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
385398
386399
Un `continue` n'est possible que depuis l'intérieur d'une boucle.
387400
````

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,11 @@ En d'autres termes, pour mettre ces termes au clair :
182182
183183
Nous déclarons des fonctions en listant leurs paramètres, puis les appelons en passant des arguments.
184184
185+
<<<<<<< HEAD
185186
Dans l'exemple ci-dessus, on pourrait dire : "la fonction `sayMessage` est déclarée avec deux paramètres, puis appelée avec deux arguments : `from` et `"Hello"`".
187+
=======
188+
In the example above, one might say: "the function `showMessage` is declared with two parameters, then called with two arguments: `from` and `"Hello"`".
189+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
186190
187191
188192
## Les valeurs par défaut

1-js/04-object-basics/06-constructor-new/1-two-functions-one-object/task.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ importance: 2
44

55
# Deux fonctions - un objet
66

7+
<<<<<<< HEAD
78
Est-il possible de créer des fonctions `A` et `B` tel que `new A()==new B()` ?
9+
=======
10+
Is it possible to create functions `A` and `B` so that `new A() == new B()`?
11+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
812
913
```js no-beautify
1014
function A() { ... }

1-js/05-data-types/02-number/article.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ En JavaScript moderne, il existe deux types de nombres :
44

55
1. Les nombres normaux en JavaScript sont stockés au format 64 bits [IEEE-754](https://en.wikipedia.org/wiki/IEEE_754-2008_revision), également connu sous le nom de "nombres à virgule flottante double précision". Ce sont des chiffres que nous utilisons le plus souvent, et nous en parlerons dans ce chapitre.
66

7+
<<<<<<< HEAD
78
2. Les nombres BigInt pour représenter des entiers de longueur arbitraire. Ils sont parfois nécessaires, car un nombre régulier ne peut pas dépasser <code>2<sup>53</sup></code> ou être inférieur à <code>-2<sup>53</sup></code>. Comme les bigints sont utilisés dans quelques zones spéciales, nous leur consacrons un chapitre spécial <info:bigint>.
9+
=======
10+
2. BigInt numbers, to represent integers of arbitrary length. They are sometimes needed, because a regular number can't safely exceed <code>2<sup>53</sup></code> or be less than <code>-2<sup>53</sup></code>. As bigints are used in few special areas, we devote them a special chapter <info:bigint>.
11+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
812
913
Donc, ici, nous allons parler de chiffres réguliers. Augmentons nos connaissances à leur sujet.
1014

@@ -54,7 +58,11 @@ Comme avant, l'utilisation de `"e"` peut nous aider. Si nous voulons éviter d'
5458
let ms = 1e-6; // six zéros à gauche de 1
5559
```
5660

61+
<<<<<<< HEAD
5762
Si nous comptons les zéros dans `0.000001`, il y en a 6. Alors, logiquement, c'est `1e-6`.
63+
=======
64+
If we count the zeroes in `0.000001`, there are 6 of them. So naturally it's `1e-6`.
65+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
5866
5967
En d'autres termes, un nombre négatif après `"e"` signifie une division par 1 avec le nombre donné de zéros:
6068

@@ -331,7 +339,11 @@ let num = +prompt("Entrez un nombre", '');
331339
alert( isFinite(num) );
332340
```
333341
342+
<<<<<<< HEAD
334343
Veuillez noter qu'une chaîne de caractères vide ou une chaîne de caractères contenant seulement un espace est traitée comme `0` dans toutes les fonctions numérique, y compris `isFinite`.
344+
=======
345+
Please note that an empty or a space-only string is treated as `0` in all numeric functions including `isFinite`.
346+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
335347
336348
```smart header="Comparer avec Object.is"
337349

1-js/05-data-types/05-array-methods/12-reduce-object/task.md

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

55
# Create keyed object from array
66

7-
Let's say we received an array of users in the form `{id:..., name:..., age... }`.
7+
Let's say we received an array of users in the form `{id:..., name:..., age:... }`.
88

99
Create a function `groupById(arr)` that creates an object from it, with `id` as the key, and array items as values.
1010

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,15 @@ Les objets manquent de nombreuses méthodes existantes pour les tableaux, par ex
7575

7676
Si nous souhaitons leur appliquer ces méthodes, nous pouvons utiliser `Object.entries` suivis par `Object.fromEntries` :
7777

78+
<<<<<<< HEAD
7879
1. Utilisons `Object.entries(obj)` pour obtenir un tableau de paires clé / valeur de `obj`.
7980
2. Utilisons des méthodes de tableau sur ce tableau, par exemple `map`.
8081
3. Utilisons `Object.fromEntries(array)` sur le tableau résultant pour le reconvertir en objet.
82+
=======
83+
1. Use `Object.entries(obj)` to get an array of key/value pairs from `obj`.
84+
2. Use array methods on that array, e.g. `map`, to transform these key/value pairs.
85+
3. Use `Object.fromEntries(array)` on the resulting array to turn it back into an object.
86+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
8187
8288
Par exemple, nous avons un objet avec des prix et aimerions les doubler :
8389

@@ -90,12 +96,22 @@ let prices = {
9096

9197
*!*
9298
let doublePrices = Object.fromEntries(
99+
<<<<<<< HEAD
93100
// convertir en tableau, mapper, puis fromEntries restitue l'objet
94101
Object.entries(prices).map(([key, value]) => [key, value * 2])
102+
=======
103+
// convert prices to array, map each key/value pair into another pair
104+
// and then fromEntries gives back the object
105+
Object.entries(prices).map(entry => [entry[0], entry[1] * 2])
106+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
95107
);
96108
*/!*
97109

98110
alert(doublePrices.meat); // 8
99-
```
111+
```
100112

113+
<<<<<<< HEAD
101114
Cela peut sembler difficile au premier abord, mais il devient facile à comprendre après l’avoir utilisé une ou deux fois. Nous pouvons faire de puissantes chaînes de transformations de cette façon.
115+
=======
116+
It may look difficult at first sight, but becomes easy to understand after you use it once or twice. We can make powerful chains of transforms this way.
117+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602

1-js/06-advanced-functions/04-var/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
```smart header="Cet article est pour comprendre les anciens scripts"
55
Les informations contenues dans cet article sont utiles pour comprendre les anciens scripts.
66
7+
<<<<<<< HEAD
78
Ce n'est pas ainsi que nous écrivons un nouveau code.
9+
=======
10+
That's not how we write new code.
11+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
812
```
913

1014
Dans le tout premier chapitre qui parle des [variables](info:variables), nous avons mentionné trois façons pour déclarer une variable :

1-js/07-object-properties/01-property-descriptors/article.md

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ Nous ne les avons pas encore vues, car généralement elles ne se présentent pa
1919

2020
Voyons d’abord comment obtenir ces "flags".
2121

22+
<<<<<<< HEAD
2223
La methode [Object.getOwnPropertyDescriptor](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptor) permet d'interroger les informations *complètes* sur une propriété.
24+
=======
25+
The method [Object.getOwnPropertyDescriptor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor) allows to query the *full* information about a property.
26+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
2327
2428
La syntaxe est la suivante:
2529
```js
@@ -54,7 +58,11 @@ alert( JSON.stringify(descriptor, null, 2 ) );
5458
*/
5559
```
5660

61+
<<<<<<< HEAD
5762
Pour changer les attributs, on peut utiliser [Object.defineProperty](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperty).
63+
=======
64+
To change the flags, we can use [Object.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty).
65+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
5866
5967
La syntaxe est la suivante:
6068

@@ -194,7 +202,11 @@ alert(Object.keys(user)); // name
194202

195203
Le descripteur non configurable (`configurable: false`) est parfois prédéfini pour les objets et propriétés intégrés.
196204

205+
<<<<<<< HEAD
197206
Une propriété non configurable ne peut pas être supprimée.
207+
=======
208+
A non-configurable property can't be deleted, its attributes can't be modified.
209+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
198210
199211
Par exemple, `Math.PI` est en lecture seule, non énumérable et non configurable :
200212

@@ -214,11 +226,12 @@ alert( JSON.stringify(descriptor, null, 2 ) );
214226
Ainsi, un programmeur est incapable de changer la valeur de `Math.PI` ou de le remplacer.
215227

216228
```js run
217-
Math.PI = 3; // Error
229+
Math.PI = 3; // Error, because it has writable: false
218230

219231
// supprimer Math.PI ne fonctionnera pas non plus
220232
```
221233

234+
<<<<<<< HEAD
222235
Rendre une propriété non configurable est une route à sens unique. Nous ne pouvons pas la rétablir avec `defineProperty`.
223236

224237
Pour être précis, la non-configurabilité impose plusieurs restrictions à `defineProperty` :
@@ -228,6 +241,20 @@ Pour être précis, la non-configurabilité impose plusieurs restrictions à `de
228241
4. Impossible de changer `get/set` pour une propriété d'accesseur (mais peut les affecter en cas d'absence).
229242

230243
**L'idée de "configurable : false" est d'empêcher les changements d'indicateurs de propriété et sa suppression, tout en permettant de changer sa valeur.**
244+
=======
245+
We also can't change `Math.PI` to be `writable` again:
246+
247+
```js run
248+
// Error, because of configurable: false
249+
Object.defineProperty(Math, "PI", { writable: true });
250+
```
251+
252+
There's absolutely nothing we can do with `Math.PI`.
253+
254+
Making a property non-configurable is a one-way road. We cannot change it back with `defineProperty`.
255+
256+
**Please note: `configurable: false` prevents changes of property flags and its deletion, while allowing to change its value.**
257+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
231258
232259
Ici, `user.name` n'est pas configurable, mais nous pouvons toujours le changer (car il est accessible en écriture) :
233260

@@ -244,7 +271,7 @@ user.name = "Pete"; // works fine
244271
delete user.name; // Error
245272
```
246273

247-
And here we make `user.name` a "forever sealed" constant:
274+
And here we make `user.name` a "forever sealed" constant, just like the built-in `Math.PI`:
248275

249276
```js run
250277
let user = {
@@ -263,10 +290,19 @@ delete user.name;
263290
Object.defineProperty(user, "name", { value: "Pete" });
264291
```
265292

293+
```smart header="The only attribute change possible: writable true -> false"
294+
There's a minor exception about changing flags.
295+
296+
We can change `writable: true` to `false` for a non-configurable property, thus preventing its value modification (to add another layer of protection). Not the other way around though.
297+
```
266298

267299
## Object.defineProperties
268300

301+
<<<<<<< HEAD
269302
Il y a une méthode [Object.defineProperties(obj, descriptors)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperties) qui permet de définir plusieurs propriétés à la fois.
303+
=======
304+
There's a method [Object.defineProperties(obj, descriptors)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) that allows to define many properties at once.
305+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
270306
271307
La syntaxe est la suivante:
272308

@@ -292,7 +328,11 @@ Nous pouvons donc définir plusieurs propriétés à la fois.
292328

293329
## Object.getOwnPropertyDescriptors
294330

331+
<<<<<<< HEAD
295332
Pour obtenir tous les descripteurs de propriété à la fois, nous pouvons utiliser la méthode [Object.getOwnPropertyDescriptors(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptors).
333+
=======
334+
To get all property descriptors at once, we can use the method [Object.getOwnPropertyDescriptors(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors).
335+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
296336
297337
Avec `Object.defineProperties`, elle peut être utilisé comme moyen de cloner un objet conscient des attributs:
298338

@@ -318,6 +358,7 @@ Les descripteurs de propriété fonctionnent au niveau des propriétés individu
318358

319359
Il existe également des méthodes qui limitent l'accès à l'objet *entier*:
320360

361+
<<<<<<< HEAD
321362
[Object.preventExtensions(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/preventExtensions)
322363
: Interdit l'ajout de nouvelles propriétés à l'objet.
323364

@@ -326,9 +367,20 @@ Il existe également des méthodes qui limitent l'accès à l'objet *entier*:
326367

327368
[Object.freeze(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/freeze)
328369
: Interdit l'ajout/la suppression/la modification de propriétés. Définit `configurable: false, writeable: false` pour toutes les propriétés existantes.
370+
=======
371+
[Object.preventExtensions(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions)
372+
: Forbids the addition of new properties to the object.
373+
374+
[Object.seal(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal)
375+
: Forbids adding/removing of properties. Sets `configurable: false` for all existing properties.
376+
377+
[Object.freeze(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)
378+
: Forbids adding/removing/changing of properties. Sets `configurable: false, writable: false` for all existing properties.
379+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
329380
330381
Et aussi il y a des tests pour eux:
331382

383+
<<<<<<< HEAD
332384
[Object.isExtensible(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/isExtensible)
333385
: Retourne `false` si l'ajout de propriétés est interdit, sinon `true`.
334386

@@ -337,5 +389,15 @@ Et aussi il y a des tests pour eux:
337389

338390
[Object.isFrozen(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/isFrozen)
339391
: Retourne `true` si l'ajout/la suppression/la modification de propriétés est interdite et si toutes les propriétés actuelles sont `configurable: false, writable: false`.
392+
=======
393+
[Object.isExtensible(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible)
394+
: Returns `false` if adding properties is forbidden, otherwise `true`.
395+
396+
[Object.isSealed(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed)
397+
: Returns `true` if adding/removing properties is forbidden, and all existing properties have `configurable: false`.
398+
399+
[Object.isFrozen(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen)
400+
: Returns `true` if adding/removing/changing properties is forbidden, and all current properties are `configurable: false, writable: false`.
401+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
340402
341403
Ces méthodes sont rarement utilisées dans la pratique.

1-js/10-error-handling/2-custom-errors/article.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,15 @@ En interne, nous utiliserons `JSON.parse`. S'il reçoit un `json` malformé, il
2121

2222
Notre fonction `readUser(json)` va non seulement lire JSON, mais aussi vérifier ("valider") les données. S'il n'y a pas de champs obligatoires ou si le format est incorrect, c'est une erreur. Et ce n’est pas une `SyntaxError`, car les données sont syntaxiquement correctes, mais un autre type d’erreur. Nous l'appellerons `ValidationError` et créerons une classe pour cela. Une erreur de ce type devrait également comporter des informations sur le champ fautif.
2323

24+
<<<<<<< HEAD
2425
Notre classe `ValidationError` devrait hériter de la classe `Error` intégrée.
2526

2627
Cette classe est intégrée, voici le code approximatif, pour que nous comprenions ce que nous étendons:
28+
=======
29+
Our `ValidationError` class should inherit from the `Error` class.
30+
31+
The `Error` class is built-in, but here's its approximate code so we can understand what we're extending:
32+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
2733
2834
```js
2935
// Le "pseudocode" pour la classe d'erreur intégrée définie par JavaScript lui-même
@@ -117,15 +123,23 @@ Nous pourrions aussi regarder `err.name`, comme ceci:
117123
// au lieu de (err instanceof SyntaxError)
118124
} else if (err.name == "SyntaxError") { // (*)
119125
// ...
120-
```
126+
```
121127
122128
La version `instanceof` est bien meilleure, car dans le futur nous allons étendre `ValidationError`, en créer des sous-types, comme `PropertyRequiredError`. Et `instanceof` check continuera à fonctionner pour les nouvelles classes héritées. Donc, c'est à l'épreuve du futur.
123129
130+
<<<<<<< HEAD
124131
De plus, il est important que si `catch` rencontre une erreur inconnue, il la propage, comme à la ligne `(**)`. Le bloc `catch` ne sait que gérer les erreurs de validation et de syntaxe, d'autres types (dus à une faute de frappe dans le code ou à d'autres inconnus) devraient "tomber".
132+
=======
133+
Also it's important that if `catch` meets an unknown error, then it rethrows it in the line `(**)`. The `catch` block only knows how to handle validation and syntax errors, other kinds (caused by a typo in the code or other unknown reasons) should fall through.
134+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
125135
126136
## Héritage complémentaire
127137
138+
<<<<<<< HEAD
128139
La classe `ValidationError` est très générique. Beaucoup de choses peuvent mal se passer. La propriété peut être absente ou dans un format incorrect (comme une valeur de chaîne pour `age`). Faisons une classe plus concrète `PropertyRequiredError`, exactement pour les propriétés absentes. Il contiendra des informations supplémentaires sur la propriété qui manque.
140+
=======
141+
The `ValidationError` class is very generic. Many things may go wrong. The property may be absent or it may be in a wrong format (like a string value for `age` instead of a number). Let's make a more concrete class `PropertyRequiredError`, exactly for absent properties. It will carry additional information about the property that's missing.
142+
>>>>>>> 4d01fc20d4d82358e61518a31efe80dec9bb2602
129143
130144
```js run
131145
class ValidationError extends Error {

0 commit comments

Comments
 (0)