Skip to content

Commit f0c1172

Browse files
authored
Merge pull request #354 from javascript-tutorial/sync-71da17e5
Sync with upstream @ 71da17e
2 parents dfb3714 + 2bf1394 commit f0c1172

File tree

42 files changed

+364
-39
lines changed

Some content is hidden

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

42 files changed

+364
-39
lines changed

1-js/02-first-steps/05-types/article.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,25 @@ Outre les nombres réguliers, il existe des "valeurs numériques spéciales" qui
4747
alert( "pas un nombre" / 2 ); // NaN, une telle division est erronée
4848
```
4949

50+
<<<<<<< HEAD
5051
`NaN` est contagieux. Toute autre opération sur `NaN` donnerait un `NaN` :
5152

5253
```js run
5354
alert( "pas un nombre" / 2 + 5 ); // NaN
5455
```
5556

5657
Donc, s'il y a `NaN` quelque part dans une expression mathématique, elle se propage à l'ensemble du résultat.
58+
=======
59+
`NaN` is sticky. Any further mathematical operation on `NaN` returns `NaN`:
60+
61+
```js run
62+
alert( NaN + 1 ); // NaN
63+
alert( 3 * NaN ); // NaN
64+
alert( "not a number" / 2 - 1 ); // NaN
65+
```
66+
67+
So, if there's a `NaN` somewhere in a mathematical expression, it propagates to the whole result (there's only one exception to that: `NaN ** 0` is `1`).
68+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
5769

5870
```smart header="Les opérations mathématiques sont sûres"
5971
Faire des maths est sans danger en JavaScript. Nous pouvons faire n'importe quoi : diviser par zéro, traiter les chaînes non numériques comme des nombres, etc.
@@ -213,6 +225,7 @@ Le type `symbol` est utilisé pour créer des identificateurs uniques pour les o
213225
214226
L'opérateur `typeof` renvoie le type de l'argument. Il est utile lorsqu'on souhaite traiter différemment les valeurs de différents types ou de faire une vérification rapide.
215227
228+
<<<<<<< HEAD
216229
Il supporte deux formes de syntaxe :
217230
218231
1. Sous forme d'opérateur : `typeof x`.
@@ -221,6 +234,9 @@ Il supporte deux formes de syntaxe :
221234
En d'autres termes, cela fonctionne à la fois avec ou sans parenthèses. Le résultat est le même.
222235
223236
L'appel `typeof x` renvoie une chaîne de caractères avec le nom du type :
237+
=======
238+
A call to `typeof x` returns a string with the type name:
239+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
224240
225241
```js
226242
typeof undefined // "undefined"
@@ -254,8 +270,26 @@ Les trois dernières lignes peuvent nécessiter des explications supplémentaire
254270
2. Le résultat de `typeof null` est `"object"`. C'est une erreur officiellement reconnue dans `typeof`, conservée pour compatibilité. Bien sûr, `null` n'est pas un objet. C'est une valeur spéciale avec un type distinct qui lui est propre.
255271
3. Le résultat de `typeof alert` est `"function"`, car `alert` est une fonction. Nous étudierons les fonctions dans les chapitres suivants, et nous verrons qu’il n’y a pas de type "fonction" en JavaScript. Les fonctions appartiennent au type `object`. Mais `typeof` les traite différemment, en retournant `"fonction"`. Cela vient également des débuts de JavaScript. Techniquement ce n’est pas tout à fait correct, mais très pratique à l'usage.
256272
273+
<<<<<<< HEAD
257274
258275
## Résumé
276+
=======
277+
1. `Math` is a built-in object that provides mathematical operations. We will learn it in the chapter <info:number>. Here, it serves just as an example of an object.
278+
2. The result of `typeof null` is `"object"`. That's an officially recognized error in `typeof`, coming from very early days of JavaScript and kept for compatibility. Definitely, `null` is not an object. It is a special value with a separate type of its own. The behavior of `typeof` is wrong here.
279+
3. The result of `typeof alert` is `"function"`, because `alert` is a function. We'll study functions in the next chapters where we'll also see that there's no special "function" type in JavaScript. Functions belong to the object type. But `typeof` treats them differently, returning `"function"`. That also comes from the early days of JavaScript. Technically, such behavior isn't correct, but can be convenient in practice.
280+
281+
```smart header="The `typeof(x)` syntax"
282+
You may also come across another syntax: `typeof(x)`. It's the same as `typeof x`.
283+
284+
To put it clear: `typeof` is an operator, not a function. The parentheses here aren't a part of `typeof`. It's the kind of parentheses used for mathematical grouping.
285+
286+
Usually, such parentheses contain a mathematical expression, such as `(2 + 2)`, but here they contain only one argument `(x)`. Syntactically, they allow to avoid a space between the `typeof` operator and its argument, and some people like it.
287+
288+
Some people prefer `typeof(x)`, although the `typeof x` syntax is much more common.
289+
```
290+
291+
## Summary
292+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
259293
260294
Il existe 8 types de données de base en JavaScript.
261295
@@ -270,8 +304,14 @@ Il existe 8 types de données de base en JavaScript.
270304

271305
L'opérateur `typeof` nous permet de voir quel type est stocké dans la variable.
272306
307+
<<<<<<< HEAD
273308
- Deux formes : `typeof x` ou `typeof(x)`.
274309
- Renvoie une chaîne de caractères avec le nom du type, comme `"string"`.
275310
- Pour `null` il renvoit `"object"` -- C’est une erreur dans le langage, ce n’est pas un objet en fait.
311+
=======
312+
- Usually used as `typeof x`, but `typeof(x)` is also possible.
313+
- Returns a string with the name of the type, like `"string"`.
314+
- For `null` returns `"object"` -- this is an error in the language, it's not actually an object.
315+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
276316

277317
Dans les chapitres suivants, nous nous concentrerons sur les valeurs primitives et une fois que nous les connaîtrons, nous passerons aux objets.

1-js/02-first-steps/08-operators/article.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ Il y a beaucoup d'opérateurs en JavaScript. Chaque opérateur a un numéro corr
191191

192192
Un extrait du [tableau de précédence](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) (vous n'avez pas besoin de vous en souvenir, mais notez que les opérateurs unaires ont une prioritée plus élevée que les binaires correspondants) :
193193

194+
<<<<<<< HEAD
194195
| Précédence | Nom | Symbole |
195196
|------------|-----------------|---------|
196197
| ... | ... | ... |
@@ -206,10 +207,31 @@ Un extrait du [tableau de précédence](https://developer.mozilla.org/en-US/docs
206207
| ... | ... | ... |
207208

208209
Comme on peut le voir, le "plus unaire" a une priorité de `17`, ce qui est supérieur à `13` pour "l'addition" (plus binaire). C’est pourquoi, dans l’expression `"+apples + +oranges"`, les plus unaires fonctionnent en premier, puis l’addition.
210+
=======
211+
| Precedence | Name | Sign |
212+
|------------|------|------|
213+
| ... | ... | ... |
214+
| 15 | unary plus | `+` |
215+
| 15 | unary negation | `-` |
216+
| 14 | exponentiation | `**` |
217+
| 13 | multiplication | `*` |
218+
| 13 | division | `/` |
219+
| 12 | addition | `+` |
220+
| 12 | subtraction | `-` |
221+
| ... | ... | ... |
222+
| 2 | assignment | `=` |
223+
| ... | ... | ... |
224+
225+
As we can see, the "unary plus" has a priority of `15` which is higher than the `13` of "addition" (binary plus). That's why, in the expression `"+apples + +oranges"`, unary pluses work before the addition.
226+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
209227
210228
## Affectation
211229

230+
<<<<<<< HEAD
212231
Notons qu’une affectation `=` est aussi un opérateur. Il est répertorié dans le tableau de priorité des précédences avec la très faible priorité de `3`.
232+
=======
233+
Let's note that an assignment `=` is also an operator. It is listed in the precedence table with the very low priority of `2`.
234+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
213235
214236
C’est pourquoi lorsque nous assignons une variable, comme `x = 2 * 2 + 1`, les calculs sont effectués en premier, puis le `=` est évalué, stockant le résultat dans `x`.
215237

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ En pratique, la hauteur zéro est souvent une valeur valide, qui ne doit pas êt
107107
108108
## Priorité
109109
110+
<<<<<<< HEAD
110111
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`.
112+
=======
113+
The precedence of the `??` operator is the same as `||`. They both equal `4` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
114+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
111115
112116
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 `+`, `*`.
113117

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,38 @@ function sayHi() {
1212

1313
Il existe une autre syntaxe pour créer une fonction appelée *Expression de Fonction*.
1414

15+
<<<<<<< HEAD
1516
Cela ressemble à ceci :
17+
=======
18+
It allows us to create a new function in the middle of any expression.
19+
20+
For example:
21+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
1622
1723
```js
1824
let sayHi = function() {
1925
alert( "Hello" );
2026
};
2127
```
2228

29+
<<<<<<< HEAD
2330
Ici, la fonction est créée et attribuée explicitement à la variable, comme toute autre valeur. Quelle que soit la définition de la fonction, il ne s’agit que d’une valeur stockée dans la variable `sayHi`.
2431

32+
=======
33+
Here we can see a variable `sayHi` getting a value, the new function, created as `function() { alert("Hello"); }`.
34+
35+
As the function creation happens in the context of the assignment expression (to the right side of `=`), this is a *Function Expression*.
36+
37+
Please note, there's no name after the `function` keyword. Omitting a name is allowed for Function Expressions.
38+
39+
Here we immediately assign it to the variable, so the meaning of these code samples is the same: "create a function and put it into the variable `sayHi`".
40+
41+
In more advanced situations, that we'll come across later, a function may be created and immediately called or scheduled for a later execution, not stored anywhere, thus remaining anonymous.
42+
43+
## Function is a value
44+
45+
Let's reiterate: no matter how the function is created, a function is a value. Both examples above store a function in the `sayHi` variable.
46+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
2547
2648
La signification de ces exemples de code est la même : "créer une fonction et la placer dans la variable `sayHi`".
2749

@@ -64,10 +86,14 @@ Voici ce qui se passe ci-dessus en détail :
6486
2. La ligne `(2)` le copie dans la variable `func`. Veuillez noter à nouveau : il n'y a pas de parenthèses après `sayHi`. S'il y en avait, alors `func = sayHi()` écrirait *le résultat de l'appel* `sayHi()` dans `func`, et non *la fonction* `sayHi` elle-même.
6587
3. Maintenant, la fonction peut être appelée à la fois en tant que `sayHi()` et `func()`.
6688

89+
<<<<<<< HEAD
6790
Notez que nous aurions aussi pu utiliser une Expression de Fonction pour déclarer `sayHi`, à la première ligne :
91+
=======
92+
We could also have used a Function Expression to declare `sayHi`, in the first line:
93+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
6894
6995
```js
70-
let sayHi = function() {
96+
let sayHi = function() { // (1) create
7197
alert( "Hello" );
7298
};
7399

@@ -92,9 +118,15 @@ let sayHi = function() {
92118
}*!*;*/!*
93119
```
94120
121+
<<<<<<< HEAD
95122
La réponse est simple :
96123
- Il n’ya pas besoin de `;` à la fin des blocs de code et des structures de syntaxe qui les utilisent comme `if { ... }`, `for { }`, `function f { }` etc.
97124
- Une Fonction Expression est utilisée dans la déclaration : `let sayHi = …;`, en tant que valeur. Ce n’est pas un bloc de code, mais plutôt une affectation. Le point-virgule `;` est recommandé à la fin des déclarations, quelle que soit la valeur. Donc, le point-virgule ici n'est en aucun cas lié à la Fonction Expression elle même, il termine simplement l'instruction.
125+
=======
126+
The answer is simple: a Function Expression is created here as `function(…) {…}` inside the assignment statement: `let sayHi = …;`. The semicolon `;` is recommended at the end of the statement, it's not a part of the function syntax.
127+
128+
The semicolon would be there for a simpler assignment, such as `let sayHi = 5;`, and it's also there for a function assignment.
129+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
98130
````
99131

100132
## Fonctions callback (de rappel)

1-js/02-first-steps/17-arrow-functions-basics/article.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ Il existe une syntaxe plus simple et concise pour créer des fonctions, c'est so
55
Les "fonctions fléchées" sont appelées ainsi pour leur syntaxe :
66

77
```js
8-
let func = (arg1, arg2, ..., argN) => expression
8+
let func = (arg1, arg2, ..., argN) => expression;
99
```
1010

11+
<<<<<<< HEAD
1112
...Cela va créér une function `func` qui accepte les arguments `arg1...argN`, puis évalue l'`expression` sur le côté droit et retourne le résultat.
13+
=======
14+
This creates a function `func` that accepts arguments `arg1..argN`, then evaluates the `expression` on the right side with their use and returns its result.
15+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
1216
1317
C'est donc la version raccourcie de :
1418

@@ -33,7 +37,11 @@ let sum = function(a, b) {
3337
alert( sum(1, 2) ); // 3
3438
```
3539

40+
<<<<<<< HEAD
3641
Comme vous pouvez le voir `(a, b) => a + b` représente une fonction qui accepte 2 arguments nommés `a` et `b`. Lors de l'éxécution, elle évalue l'expression `a + b` et retourne le résultat.
42+
=======
43+
As you can see, `(a, b) => a + b` means a function that accepts two arguments named `a` and `b`. Upon the execution, it evaluates the expression `a + b` and returns the result.
44+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
3745
3846
- Pour un argument unique, alors les parenthèses autour du paramètre peuvent être omises, rendant la fonction encore plus courte.
3947

@@ -86,7 +94,11 @@ Comme cela :
8694
let sum = (a, b) => { // Les accolades ouvre une fonction multiligne
8795
let result = a + b;
8896
*!*
97+
<<<<<<< HEAD
8998
return result; // Si nous utilisons des accolades le "return" est nécessaire
99+
=======
100+
return result; // if we use curly braces, then we need an explicit "return"
101+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
90102
*/!*
91103
};
92104

1-js/04-object-basics/04-object-methods/8-chain-calls/_js.view/solution.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ let ladder = {
1111
},
1212
showStep: function() {
1313
alert(this.step);
14+
return this;
1415
}
1516
};

1-js/04-object-basics/04-object-methods/8-chain-calls/_js.view/test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ describe('Ladder', function() {
3232
it('down().up().up().up() ', function() {
3333
assert.equal(ladder.down().up().up().up().step, 2);
3434
});
35+
36+
it('showStep() should return this', function() {
37+
assert.equal(ladder.showStep(), ladder);
38+
});
39+
40+
it('up().up().down().showStep().down().showStep()', function () {
41+
assert.equal(ladder.up().up().down().showStep().down().showStep().step, 0)
42+
});
3543

3644
after(function() {
3745
ladder.step = 0;

1-js/04-object-basics/04-object-methods/8-chain-calls/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ let ladder = {
2323
}
2424
};
2525

26-
ladder.up().up().down().up().down().showStep(); // 1
26+
ladder.up().up().down().showStep().down().showStep(); // shows 1 then 0
2727
```
2828

2929
Nous pouvons également écrire un seul appel par ligne. Pour les longues chaînes, c'est plus lisible :
@@ -33,8 +33,8 @@ ladder
3333
.up()
3434
.up()
3535
.down()
36-
.up()
36+
.showStep() // 1
3737
.down()
38-
.showStep(); // 1
38+
.showStep(); // 0
3939
```
4040

1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ ladder.up();
2828
ladder.up();
2929
ladder.down();
3030
ladder.showStep(); // 1
31+
ladder.down();
32+
ladder.showStep(); // 0
3133
```
3234

3335
Modifiez le code de `up` et `down` pour rendre les appels chaînables, comme ceci :
3436

3537
```js
36-
ladder.up().up().down().showStep(); // 1
38+
ladder.up().up().down().showStep().down().showStep(); // shows 1 then 0
3739
```
3840

3941
Cette approche est largement utilisée dans les bibliothèques JavaScript.

1-js/04-object-basics/06-constructor-new/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Le constructeur, l'opérateur "new"
22

3+
<<<<<<< HEAD
34
La syntaxe normale `{...}` permet de créer un seul objet. Mais souvent, nous devons créer de nombreux objets similaires, tels que plusieurs utilisateurs ou éléments de menu, etc.
5+
=======
6+
The regular `{...}` syntax allows us to create one object. But often we need to create many similar objects, like multiple users or menu items and so on.
7+
>>>>>>> 71da17e5960f1c76aad0d04d21f10bc65318d3f6
48
59
Cela peut être fait en utilisant les fonctions du constructeur et l'opérateur `"new"`.
610

0 commit comments

Comments
 (0)