Skip to content

Commit f0fc02b

Browse files
authored
Merge pull request #311 from javascript-tutorial/sync-8558fa8f
Sync with upstream @ 8558fa8
2 parents 5337648 + c363078 commit f0fc02b

File tree

37 files changed

+453
-64
lines changed

37 files changed

+453
-64
lines changed

1-js/01-getting-started/1-intro/article.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,15 @@ Le navigateur a un moteur intégré, parfois il peut être également appelé "l
2727

2828
Différents moteurs ont différents "nom de code", par exemple:
2929

30+
<<<<<<< HEAD
3031
- [V8](https://fr.wikipedia.org/wiki/V8_(moteur_JavaScript)) -- dans Chrome et Opera.
3132
- [SpiderMonkey](https://fr.wikipedia.org/wiki/SpiderMonkey) -- dans Firefox.
3233
- … Il existe d'autres noms de code comme "Trident", "Chakra" pour différentes version d'Internet Explorer, "ChakraCore" pour Microsoft Edge, "Nitro" ans "SquirrelFish" pour Safari etc.
34+
=======
35+
- [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) -- in Chrome and Opera.
36+
- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- in Firefox.
37+
- ...There are other codenames like "Chakra" for IE, "JavaScriptCore", "Nitro" and "SquirrelFish" for Safari, etc.
38+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
3339
3440
Les termes ci-dessus sont bons à retenir, car ils sont utilisés dans les articles destinés aux développeurs sur Internet. Nous les utiliserons aussi. Par exemple, si "une fonctionnalité X est prise en charge par V8", cela fonctionne probablement dans Chrome et Opera.
3541

1-js/02-first-steps/02-structure/article.md

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ alert(3 +
4646
+ 2);
4747
```
4848

49+
<<<<<<< HEAD
4950
Le code génère `6`, car JavaScript n'insère pas de point-virgule ici. Il est intuitivement évident que si la ligne se termine par un plus `"+"`, alors c'est une "expression incomplète", aucun point-virgule requis. Et dans ce cas, cela fonctionne comme prévu.
51+
=======
52+
The code outputs `6` because JavaScript does not insert semicolons here. It is intuitively obvious that if the line ends with a plus `"+"`, then it is an "incomplete expression", so a semicolon there would be incorrect. And in this case, that works as intended.
53+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
5054
5155
**Mais il existe des situations où JavaScript "échoue" à prendre un point-virgule là où il est vraiment nécessaire.**
5256

@@ -56,40 +60,63 @@ Les erreurs qui surviennent dans de tels cas sont assez difficiles à trouver et
5660
Si vous êtes curieux de voir un exemple concret d’une telle erreur, vérifiez ce code :
5761
5862
```js run
59-
[1, 2].forEach(alert)
63+
alert("Hello");
64+
65+
[1, 2].forEach(alert);
6066
```
6167
68+
<<<<<<< HEAD
6269
Pas besoin de penser à la signification des crochets `[]` et `forEach` pour le moment. Nous les étudierons plus tard, pour l'instant, cela n'a pas d'importance. Retenons simplement le résultat: il affiche `1`, puis `2`.
6370
6471
Maintenant, ajoutons une `alert` avant le code et **ne le terminons pas** par un point-virgule :
72+
=======
73+
No need to think about the meaning of the brackets `[]` and `forEach` yet. We'll study them later. For now, just remember the result of running the code: it shows `Hello`, then `1`, then `2`.
74+
75+
Now let's remove the semicolon after the `alert`:
76+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
6577
6678
```js run no-beautify
67-
alert("There will be an error")
79+
alert("Hello")
6880
69-
[1, 2].forEach(alert)
81+
[1, 2].forEach(alert);
7082
```
7183
84+
<<<<<<< HEAD
7285
Maintenant, si nous l'exécutons, seul le premier `alert` est affiché, puis nous avons une erreur!
7386
7487
Mais tout va bien à nouveau si on ajoute un point-virgule après `alert` :
7588
```js run
7689
alert("All fine now");
90+
=======
91+
The difference compared to the code above is only one character: the semicolon at the end of the first line is gone.
92+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
7793
78-
[1, 2].forEach(alert)
79-
```
94+
If we run this code, only the first `Hello` shows (and there's an error, you may need to open the console to see it). There are no numbers any more.
8095
96+
<<<<<<< HEAD
8197
Nous avons maintenant le message `"All fine now"`, puis `1` et `2`.
8298
8399
84100
L'erreur dans la variante sans point-virgule se produit car JavaScript n'implique pas de point-virgule avant les crochets `[...]`.
85101
86102
Ainsi, le point-virgule n'étant pas inséré automatiquement, le code du premier exemple est traité comme une seule instruction. C'est comme ça que le moteur le voit :
103+
=======
104+
That's because JavaScript does not assume a semicolon before square brackets `[...]`. So, the code in the last example is treated as a single statement.
105+
106+
Here's how the engine sees it:
107+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
87108
88109
```js run no-beautify
89-
alert("There will be an error")[1, 2].forEach(alert)
110+
alert("Hello")[1, 2].forEach(alert);
90111
```
91112
113+
<<<<<<< HEAD
92114
Mais ce devrait être deux déclarations distinctes, pas une seule. Une telle fusion dans ce cas est tout simplement erronée, d'où l'erreur. Il y a d'autres situations où une telle chose peut se produire.
115+
=======
116+
Looks weird, right? Such merging in this case is just wrong. We need to put a semicolon after `alert` for the code to work correctly.
117+
118+
This can happen in other situations also.
119+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
93120
````
94121

95122
Il est recommandé de mettre les points-virgules entre les instructions, même si elles sont séparées par des nouvelles lignes. Cette règle est largement adoptée par la communauté. Notons encore une fois - *il est possible* de laisser de côté les points-virgules la plupart du temps. Mais il est plus sûr -- surtout pour un débutant -- de les utiliser.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Les valeurs numériques spéciales appartiennent formellement au type "number".
6565

6666
Nous allons en voir plus sur le travail avec les nombres dans le chapitre <info:number>.
6767

68-
## BigInt
68+
## BigInt [#bigint-type]
6969

7070
En JavaScript, le type "number" ne peut pas représenter des valeurs entières supérieures à <code>(2<sup>53</sup>-1)</code> (c'est `9007199254740991`), ou moins que <code>-(2<sup>53</sup>-1)</code> pour les chiffres négatifs. C'est une limitation technique causée par leur représentation interne.
7171

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ En mathématiques à l'école, nous écrivons cela a<sup>b</sup>.
6262
Par exemple:
6363

6464
```js run
65-
alert( 2 ** 2 ); // 2² = 4
66-
alert( 2 ** 3 ); // 2³ = 8
65+
alert( 2 ** 2 ); // 2² = 4
66+
alert( 2 ** 3 ); // 2³ = 8
6767
alert( 2 ** 4 ); // 2⁴ = 16
6868
```
6969

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

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@ function showMessage() {
2020
}
2121
```
2222

23+
<<<<<<< HEAD
2324
Le mot-clé `function` commence en premier, puis le *nom de la fonction*, puis une liste de *paramètres* entre les parenthèses (séparés par des virgules, vides dans l'exemple ci-dessus) et enfin le code de la fonction, également appelé "le corps de la fonction", entre des accolades.
25+
=======
26+
The `function` keyword goes first, then goes the *name of the function*, then a list of *parameters* between the parentheses (comma-separated, empty in the example above, we'll see examples later) and finally the code of the function, also named "the function body", between curly braces.
27+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
2428
2529
```js
26-
function name(parameters) {
30+
function name(parameter1, parameter2, ... parameterN) {
2731
...body...
2832
}
2933
```
@@ -138,26 +142,31 @@ C'est une bonne pratique de minimiser l'utilisation de variables globales. Le co
138142

139143
## Arguments
140144

145+
<<<<<<< HEAD
141146
Nous pouvons transmettre des données arbitraires à des fonctions à l'aide de paramètres (également appelés *arguments de fonction*).
147+
=======
148+
We can pass arbitrary data to functions using parameters.
149+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
142150
143151
Dans l'exemple ci-dessous, la fonction a deux paramètres: `from` et `text`.
144152

145153
```js run
154+
<<<<<<< HEAD
146155
function showMessage(*!*from, text*/!*) { // arguments : from, text
156+
=======
157+
function showMessage(*!*from, text*/!*) { // parameters: from, text
158+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
147159
alert(from + ': ' + text);
148160
}
149161

150-
*!*
151-
showMessage('Ann', 'Hello!'); // Ann: Hello! (*)
152-
showMessage('Ann', "What's up?"); // Ann: What's up? (**)
153-
*/!*
162+
*!*showMessage('Ann', 'Hello!');*/!* // Ann: Hello! (*)
163+
*!*showMessage('Ann', "What's up?");*/!* // Ann: What's up? (**)
154164
```
155165
156166
Lorsque la fonction est appelée dans les lignes `(*)` et `(**)`, les valeurs données sont copiées dans les variables locales `from` et `text`. Ensuite, la fonction les utilise.
157167
158168
Voici un autre exemple: nous avons une variable `from` et la transmettons à la fonction. Remarque : la fonction change `from`, mais le changement n'est pas visible à l'extérieur, car une fonction obtient toujours une copie de la valeur :
159169
160-
161170
```js run
162171
function showMessage(from, text) {
163172
@@ -176,19 +185,43 @@ showMessage(from, "Hello"); // *Ann*: Hello
176185
alert( from ); // Ann
177186
```
178187
188+
<<<<<<< HEAD
179189
## Les valeurs par défaut
180190
181191
Si un paramètre n'est pas fourni, sa valeur devient `undefined`.
192+
=======
193+
When a value is passed as a function parameter, it's also called an *argument*.
194+
195+
In other words, to put these terms straight:
196+
197+
- A parameter is the variable listed inside the parentheses in the function declaration (it's a declaration time term)
198+
- An argument is the value that is passed to the function when it is called (it's a call time term).
199+
200+
We declare functions listing their parameters, then call them passing arguments.
201+
202+
In the example above, one might say: "the function `sayMessage` is declared with two parameters, then called with two arguments: `from` and `"Hello"`".
203+
204+
205+
## Default values
206+
207+
If a function is called, but an argument is not provided, then the corresponding value becomes `undefined`.
208+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
182209
183210
Par exemple, la fonction `showMessage(from, text)` mentionnée précédemment peut être appelée avec un seul argument :
184211
185212
```js
186213
showMessage("Ann");
187214
```
188215
216+
<<<<<<< HEAD
189217
Ce n’est pas une erreur. Un tel appel produirait `"*Annt*: undefined"`. Il n’y a pas de `text`, donc on suppose que `text === undefined`.
190218
191219
Si nous voulons utiliser un `text` "par défaut" dans ce cas, nous pouvons le spécifier après `=` :
220+
=======
221+
That's not an error. Such a call would output `"*Ann*: undefined"`. As the value for `text` isn't passed, it becomes `undefined`.
222+
223+
We can specify the so-called "default" (to use if omitted) value for a parameter in the function declaration, using `=`:
224+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
192225
193226
```js run
194227
function showMessage(from, *!*text = "no text given"*/!*) {
@@ -212,19 +245,33 @@ function showMessage(from, text = anotherFunction()) {
212245

213246
En JavaScript, un paramètre par défaut est évalué chaque fois que la fonction est appelée sans le paramètre correspondant.
214247

248+
<<<<<<< HEAD
215249
Dans l'exemple ci-dessus, `anotherFunction()` est appelé à chaque fois que `showMessage()` est appelé sans le paramètre `text`.
250+
=======
251+
In the example above, `anotherFunction()` isn't called at all, if the `text` parameter is provided.
252+
253+
On the other hand, it's independently called every time when `text` is missing.
254+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
216255
```
217256
218257
### Paramètres par défaut alternatifs
219258
259+
<<<<<<< HEAD
220260
Il est parfois judicieux de définir des valeurs par défaut pour les paramètres non pas dans la déclaration de fonction, mais à un stade ultérieur, lors de son exécution.
221261
222262
Pour vérifier un paramètre omis, nous pouvons le comparer avec `undefined` :
263+
=======
264+
Sometimes it makes sense to assign default values for parameters not in the function declaration, but at a later stage.
265+
266+
We can check if the parameter is passed during the function execution, by comparing it with `undefined`:
267+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
223268
224269
```js run
225270
function showMessage(text) {
271+
// ...
272+
226273
*!*
227-
if (text === undefined) {
274+
if (text === undefined) { // if the parameter is missing
228275
text = 'empty message';
229276
}
230277
*/!*
@@ -238,18 +285,29 @@ showMessage(); // empty message
238285
...Ou nous pourrions utiliser l'opérateur `||` :
239286

240287
```js
288+
<<<<<<< HEAD
241289
// si le paramètre de texte est omis ou "" est passé, définissez-le sur 'empty'
290+
=======
291+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
242292
function showMessage(text) {
293+
// if text is undefined or otherwise falsy, set it to 'empty'
243294
text = text || 'empty';
244295
...
245296
}
246297
```
247298

299+
<<<<<<< HEAD
248300
Les moteurs JavaScript modernes prennent en charge [l'opérateur de coalescence des nuls](info:nullish-coalescing-operator) `??`, c'est mieux quand des valeurs fausses, telles que `0`, sont considérées comme régulières :
249301

250302
```js run
251303
// s'il n'y a pas de paramètre "count", afficher "unknown"
304+
=======
305+
Modern JavaScript engines support the [nullish coalescing operator](info:nullish-coalescing-operator) `??`, it's better when most falsy values, such as `0`, should be considered "normal":
306+
307+
```js run
308+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
252309
function showCount(count) {
310+
// if count is undefined or null, show "unknown"
253311
alert(count ?? "unknown");
254312
}
255313

1-js/03-code-quality/01-debugging-chrome/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
<<<<<<< HEAD
12
# Débogage dans Chrome
3+
=======
4+
# Debugging in the browser
5+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
26
37
Avant d’écrire un code plus complexe, parlons de débogage.
48

1-js/03-code-quality/06-polyfills/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ Ici, dans ce chapitre, notre objectif est de comprendre l'essentiel de leur fonc
2222

2323
## Les transpilers
2424

25+
<<<<<<< HEAD
2526
Un [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) est un logiciel spécial qui peut analyser ("lire et comprendre") le code moderne et le réécrire en utilisant des constructions de syntaxe plus anciennes, de sorte que le résultat soit le même.
27+
=======
28+
A [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) is a special piece of software that translates source code to another source code. It can parse ("read and understand") modern code and rewrite it using older syntax constructs, so that it'll also work in outdated engines.
29+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
2630
2731
Par exemple, JavaScript avant l'année 2020 n'avait pas "l'opérateur de coalescence des nuls" `??`. Ainsi, si un visiteur utilise un navigateur obsolète, il peut ne pas comprendre le code tel que `height = height ?? 100`.
2832

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,21 @@ Maintenant, si nous voulons créer d'autres utilisateurs, nous pouvons appeler `
6464

6565
C’est l’objectif principal des constructeurs -- implémenter du code de création d’objet réutilisable.
6666

67+
<<<<<<< HEAD
6768
Notons encore une fois - techniquement, toute fonction peut être utilisée en tant que constructeur. Autrement dit, toute fonction peut être exécutée avec `new`, et il exécutera l'algorithme ci-dessus. La "lettre majuscule d’abord" est une convention pour préciser qu’une fonction doit être exécutée avec `new`.
6869

6970
````smart header="new function() { ... }"
7071
Si nous avons beaucoup de lignes de code concernant la création d'un seul objet complexe, nous pouvons les envelopper dans une fonction constructeur, comme ceci :
72+
=======
73+
Let's note once again -- technically, any function (except arrow functions, as they don't have `this`) can be used as a constructor. It can be run with `new`, and it will execute the algorithm above. The "capital letter first" is a common agreement, to make it clear that a function is to be run with `new`.
74+
75+
````smart header="new function() { ... }"
76+
If we have many lines of code all about creation of a single complex object, we can wrap them in an immediately called constructor function, like this:
77+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
7178
7279
```js
73-
let user = new function() {
80+
// create a function and immediately call it with new
81+
let user = new function() {
7482
this.name = "John";
7583
this.isAdmin = false;
7684
@@ -80,7 +88,11 @@ let user = new function() {
8088
};
8189
```
8290
91+
<<<<<<< HEAD
8392
Le constructeur ne peut plus être appelé car il n’est sauvegardé nulle part, il est simplement créé et appelé. Donc, cette astuce vise à encapsuler le code qui construit l'objet unique, sans réutilisation ultérieure.
93+
=======
94+
This constructor can't be called again, because it is not saved anywhere, just created and called. So this trick aims to encapsulate the code that constructs the single object, without future reuse.
95+
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
8496
````
8597

8698
## Constructeur mode test : new.target

0 commit comments

Comments
 (0)