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/01-getting-started/1-intro/article.md
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,10 @@
1
1
# Une Introduction à JavaScript
2
2
3
+
<<<<<<< HEAD
3
4
Voyons ce qui est spécial à propos de JavaScript, ce qu'il nous permet de faire et avec quelles autres technologies il s'accorde bien.
5
+
=======
6
+
Let's see what's so special about JavaScript, what we can achieve with it, and what other technologies play well with it.
7
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
4
8
5
9
## Qu'est-ce que JavaScript?
6
10
@@ -67,7 +71,12 @@ Les exemples de telles restrictions sont:
67
71
68
72
Les navigateurs modernes lui permettent de fonctionner avec des fichiers, mais l'accès est limité et n'est fourni que si l'utilisateur effectue certaines actions, comme «déposer» un fichier dans une fenêtre de navigateur ou le sélectionner via une balise `<input>`.
69
73
74
+
<<<<<<< HEAD
70
75
Il existe des moyens d’interagir avec une webcam / microphone et d’autres appareils, mais ils nécessitent une autorisation explicite de l’utilisateur. Ainsi, une page compatible avec JavaScript ne permet pas d'activer une caméra Web, d'observer l'environnement et d'envoyer les informations à la [NSA](https://fr.wikipedia.org/wiki/National_Security_Agency).
76
+
=======
77
+
There are ways to interact with camera/microphone and other devices, but they require a user's explicit permission. So a JavaScript-enabled page may not sneakily enable a web-camera, observe the surroundings and send the information to the [NSA](https://en.wikipedia.org/wiki/National_Security_Agency).
78
+
- Different tabs/windows generally do not know about each other. Sometimes they do; for example when one window uses JavaScript to open the other one. But even in this case, JavaScript from one page may not access the other if they come from different sites (from a different domain, protocol or port).
79
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
71
80
72
81
- Différents onglets / fenêtres ne se connaissent généralement pas. Parfois, ils se croisent, par exemple lorsqu'une fenêtre utilise JavaScript pour ouvrir l'autre. Mais même dans ce cas, le JavaScript d'une page ne peut pas accéder à l'autre si elle provient de sites différents (provenant d'un autre domaine, protocole ou port).
73
82
@@ -119,6 +128,12 @@ Il en existe évidemment bien plus, cela dit, même si nous utilisons un de ces
119
128
120
129
## Résumé
121
130
131
+
<<<<<<< HEAD
122
132
- JavaScript a été initialement créé en tant que langage de navigateur uniquement, mais il est désormais également utilisé dans de nombreux autres environnements.
123
133
- En ce moment, JavaScript occupe une position unique en tant que langage de navigateur le plus largement adopté avec une intégration complète avec HTML / CSS.
124
134
- De nombreux langages sont "transpilés" en JavaScript et fournissent certaines fonctionnalités. Il est recommandé d'y jeter un coup d'œil, au moins brièvement, après avoir maîtrisé JavaScript.
135
+
=======
136
+
- JavaScript was initially created as a browser-only language, but it is now used in many other environments as well.
137
+
- Today, JavaScript has a unique position as the most widely-adopted browser language with full integration in HTML/CSS.
138
+
- There are many languages that get "transpiled" to JavaScript and provide certain features. It is recommended to take a look at them, at least briefly, after mastering JavaScript.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/18-javascript-specials/article.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -144,7 +144,11 @@ Affectations
144
144
: Il y a une assignation simple : `a = b` et des combinés comme `a *= 2`.
145
145
146
146
Bitwise
147
+
<<<<<<< HEAD
147
148
: Les opérateurs au niveau des bits fonctionnent avec des entiers de niveau binaire : voir la [doc](mdn:/JavaScript/Reference/Operators/Bitwise_Operators) quand ils sont nécessaires.
149
+
=======
150
+
: Bitwise operators work with 32-bit integers at the lowest, bit-level: see the [docs](mdn:/JavaScript/Guide/Expressions_and_Operators#Bitwise) when they are needed.
151
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
148
152
149
153
Conditionnel
150
154
: Le seul opérateur avec trois paramètres : `cond ? resultA : resultB`. Si `cond` est vrai, retourne `resultA`, autrement `resultB`.
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/02-object-copy/article.md
+27-14Lines changed: 27 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,12 @@
1
-
# Object copying, references
1
+
# Object references and copying
2
2
3
-
One of the fundamental differences of objects vs primitives is that they are stored and copied "by reference".
3
+
One of the fundamental differences of objects versus primitives is that objects are stored and copied "by reference", as opposed to primitive values: strings, numbers, booleans, etc -- that are always copied "as a whole value".
4
4
5
-
Primitive values: strings, numbers, booleans -- are assigned/copied "as a whole value".
5
+
That's easy to understand if we look a bit "under a cover" of what happens when we copy a value.
6
6
7
-
For instance:
7
+
Let's start with a primitive, such as a string.
8
+
9
+
Here we put a copy of `message` into `phrase`:
8
10
9
11
```js
10
12
let message ="Hello!";
@@ -15,21 +17,31 @@ As a result we have two independent variables, each one is storing the string `"
15
17
16
18

17
19
20
+
Quite an obvious result, right?
21
+
18
22
Objects are not like that.
19
23
20
-
**A variable stores not the object itself, but its "address in memory", in other words "a reference" to it.**
24
+
**A variable assigned to an object stores not the object itself, but its "address in memory", in other words "a reference" to it.**
21
25
22
-
Here's the picture for the object:
26
+
Let's look at an example of such variable:
23
27
24
28
```js
25
29
let user = {
26
30
name:"John"
27
31
};
28
32
```
29
33
34
+
And here's how it's actually stored in memory:
35
+
30
36

31
37
32
-
Here, the object is stored somewhere in memory. And the variable `user` has a "reference" to it.
38
+
The object is stored somewhere in memory (at the right of the picture), while the `user` variable (at the left) has a "reference" to it.
39
+
40
+
We may think of an object variable, such as `user`, as of a sheet of paper with the address.
41
+
42
+
When we perform actions with the object, e.g. take a property `user.name`, JavaScript engine looks into that address and performs the operation on the actual object.
43
+
44
+
Now here's why it's important.
33
45
34
46
**When an object variable is copied -- the reference is copied, the object is not duplicated.**
35
47
@@ -45,6 +57,8 @@ Now we have two variables, each one with the reference to the same object:
45
57
46
58

47
59
60
+
As you can see, there's still one object, now with two variables that reference it.
61
+
48
62
We can use any variable to access the object and modify its contents:
49
63
50
64
```js run
@@ -59,15 +73,14 @@ admin.name = 'Pete'; // changed by the "admin" reference
59
73
alert(*!*user.name*/!*); //'Pete', changes are seen from the "user" reference
60
74
```
61
75
62
-
The example above demonstrates that there is only one object. As if we had a cabinet with two keys and used one of them (`admin`) to get into it. Then, if we later use another key (`user`) we can see changes.
63
76
64
-
## Comparison by reference
77
+
It's just as if we had a cabinet with two keys and used one of them (`admin`) to get into it. Then, if we later use another key (`user`) we can see changes.
65
78
66
-
The equality `==` and strict equality `===` operators for objects work exactly the same.
79
+
## Comparison by reference
67
80
68
-
**Two objects are equal only if they are the same object.**
81
+
Two objects are equal only if they are the same object.
69
82
70
-
Here two variables reference the same object, thus they are equal:
83
+
For instance, here `a` and `b` reference the same object, thus they are equal:
71
84
72
85
```js run
73
86
let a = {};
@@ -77,7 +90,7 @@ alert( a == b ); // true, both variables reference the same object
77
90
alert( a === b ); // true
78
91
```
79
92
80
-
And here two independent objects are not equal, even though both are empty:
93
+
And here two independent objects are not equal, even though they look alike (both are empty):
81
94
82
95
```js run
83
96
let a = {};
@@ -86,7 +99,7 @@ let b = {}; // two independent objects
86
99
alert( a == b ); // false
87
100
```
88
101
89
-
For comparisons like `obj1 > obj2` or for a comparison against a primitive `obj ==5`, objects are converted to primitives. We'll study how object conversions work very soon, but to tell the truth, such comparisons occur very rarely, usually as a result of a coding mistake.
102
+
For comparisons like `obj1 > obj2` or for a comparison against a primitive `obj ==5`, objects are converted to primitives. We'll study how object conversions work very soon, but to tell the truth, such comparisons are needed very rarely, usually they appear as a result of a programming mistake.
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/04-object-methods/article.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,11 +32,19 @@ user.sayHi = function() {
32
32
user.sayHi(); // Hello!
33
33
```
34
34
35
+
<<<<<<< HEAD
35
36
Ici, nous venons d'utiliser une expression de fonction pour créer la fonction et l'affecter à la propriété `user.sayHi` de l'objet.
36
37
37
38
Ensuite, nous pouvons l'appeler. L'utilisateur peut maintenant parler!
38
39
39
40
Une fonction qui est la propriété d'un objet s'appelle sa *méthode*.
41
+
=======
42
+
Here we've just used a Function Expression to create a function and assign it to the property `user.sayHi` of the object.
43
+
44
+
Then we can call it as `user.sayHi()`. The user can now speak!
45
+
46
+
A function that is a property of an object is called its *method*.
47
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
40
48
41
49
Nous avons donc ici une méthode `sayHi` de l’objet `user`.
42
50
@@ -160,14 +168,24 @@ let user = {
160
168
let admin = user;
161
169
user =null; // écraser pour rendre les choses évidentes
162
170
171
+
<<<<<<<HEAD
163
172
admin.sayHi(); // Oups ! Dans sayHi(), l'ancien nom est utilisé ! Erreur !
173
+
=======
174
+
*!*
175
+
admin.sayHi(); // TypeError: Cannot read property 'name' of null
176
+
*/!*
177
+
>>>>>>>0599d07b3c13ee25f583fc091cead3c17a7e7779
164
178
```
165
179
166
180
Si nous utilisions `this.name` au lieu de `user.name` dans l'`alert`, le code fonctionnerait.
167
181
168
182
## "this" n'est pas lié
169
183
184
+
<<<<<<< HEAD
170
185
En JavaScript, le mot clé `this` se comporte différemment de la plupart des autres langages de programmation. Il peut être utilisé dans n'importe quelle fonction.
186
+
=======
187
+
In JavaScript, keyword `this` behaves unlike most other programming languages. It can be used in any function, even if it's not a method of an object.
188
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
171
189
172
190
Il n’y a pas d’erreur de syntaxe dans le code suivant :
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/07-optional-chaining/article.md
+44-17Lines changed: 44 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,21 +4,30 @@
4
4
5
5
[recent browser="new"]
6
6
7
-
Le chaînage optionnel `?.` Est un moyen sans erreur d'accéder aux propriétés d'objet imbriquées, même si une propriété intermédiaire n'existe pas.
8
7
9
-
## Le problème
8
+
Le chaînage optionnel `?.` Est un moyen sécurisé d'accéder aux propriétés d'objet imbriquées, même si une propriété intermédiaire n'existe pas.
9
+
10
+
## Le problème de la "propriété non existante"
11
+
10
12
11
13
Si vous venez de commencer à lire le tutoriel et à apprendre JavaScript, peut-être que le problème ne vous a pas encore touché, mais c'est assez courant.
12
14
13
-
Par exemple, certains de nos utilisateurs ont des adresses, mais peu ne les ont pas fournies. Ensuite, nous ne pouvons pas lire en toute sécurité `user.address.street` :
15
+
16
+
À titre d'exemple, considérons les objets pour les données utilisateur. La plupart de nos utilisateurs ont des adresses dans la propriété `user.address`, avec la rue `user.address.street`, mais certains ne les ont pas fournies.
17
+
Dans ce cas, lorsque nous tentons d'obtenir `user.address.street`, nous obtenons une erreur :
14
18
15
19
```js run
16
-
let user = {}; // l'utilisateur se trouve être sans adresse
20
+
let user = {}; // l'utilisateur sans propriété "address"
21
+
17
22
18
23
alert(user.address.street); // Error!
19
24
```
20
25
21
-
Ou, dans le développement Web, nous aimerions obtenir une information sur un élément de la page, mais il peut ne pas exister :
26
+
27
+
C'est le résultat attendu, JavaScript fonctionne comme ça, mais dans de nombreux cas pratiques, nous préférerions obtenir `undefined` au lieu d'une erreur (signifiant "pas de rue").
28
+
29
+
... Et un autre exemple. Dans le développement Web, nous pouvons avoir besoin d'obtenir une information sur un élément de la page, qui n'existe parfois pas:
30
+
22
31
23
32
```js run
24
33
// Erreur si le résultat de querySelector(...) est null
@@ -35,7 +44,9 @@ let user = {}; // l'utilisateur n'a pas d'adresse
35
44
alert( user &&user.address&&user.address.street ); // undefined (no error)
36
45
```
37
46
38
-
ET le chemin d'accès complet à la propriété garantit que tous les composants existent, mais il est difficile à écrire.
47
+
48
+
ET l'ensemble du chemin d'accès à la propriété garantit que tous les composants existent (sinon, l'évaluation s'arrête), mais est difficile à écrire.
49
+
39
50
40
51
## Chaînage optionnel
41
52
@@ -71,7 +82,9 @@ Nous ne devrions utiliser `?.` que là où il est normal que quelque chose n'exi
71
82
72
83
Par exemple, si selon notre logique de codage, l'objet `user` doit être là, mais que `address` est facultatif, alors `user.address?.street` serait mieux.
73
84
74
-
Donc, si `user` n'est pas défini à cause d'une erreur, nous le saurons et le réparerons. Sinon, les erreurs de codage peuvent être réduites au silence lorsqu'elles ne sont pas appropriées et devenir plus difficiles à déboguer.
85
+
86
+
Donc, si `user` n'est pas défini en raison d'une erreur, nous verrons une erreur de programmation à ce sujet et la corrigerons. Sinon, les erreurs de codage peuvent être réduites au silence lorsqu'elles ne sont pas appropriées et devenir plus difficiles à déboguer.
87
+
75
88
```
76
89
77
90
````warn header="La variable avant `?.` doit être déclarée"
@@ -81,26 +94,33 @@ S'il n'y a pas du tout de variable `user`, alors `user?.anything` déclenche une
81
94
// ReferenceError: user is not defined
82
95
user?.address;
83
96
```
84
-
Il doit y avoir `let/const/var user`. Le chaînage optionnel ne fonctionne que pour les variables déclarées.
97
+
98
+
Il doit y avoir une déclaration (par exemple `let/const/var user`). Le chaînage optionnel ne fonctionne que pour les variables déclarées.
99
+
85
100
````
86
101
87
102
## Court-circuit
88
103
89
104
Comme il a été dit précédemment, le `?.` arrête immédiatement ("court-circuite") l'évaluation si la partie gauche n'existe pas.
90
105
106
+
91
107
Donc, s'il y a d'autres appels de fonction ou effets secondaires, ils ne se produisent pas :
92
108
109
+
Par exemple :
110
+
93
111
```js run
94
112
let user = null;
95
113
let x = 0;
96
114
97
-
user?.sayHi(x++); // rien ne se passe
115
+
116
+
user?.sayHi(x++); // pas de "sayHi", donc l'exécution n'atteint pas x++
117
+
98
118
99
119
alert(x); // 0, la valeur n'est pas incrémenté
100
120
```
101
121
102
122
103
-
## Autres cas : ?.(), ?.[]
123
+
## Autres variantes : ?.(), ?.[]
104
124
105
125
`?.` n'est pas un opérateur, mais une construction syntaxique particulière qui fonctionne aussi avec les appels de fonction et les crochets.
106
126
@@ -123,9 +143,10 @@ user2.admin?.();
123
143
*/!*
124
144
```
125
145
126
-
Ici, dans les deux lignes, nous utilisons d'abord le point `.` pour obtenir la propriété `admin`, car l'objet utilisateur doit exister, il peut donc être lu en toute sécurité.
127
146
128
-
Puis `?.()` Vérifie la partie gauche : si la fonction admin existe, alors elle s'exécute (pour `user1`). Sinon (pour `user2`), l'évaluation s'arrête sans erreur.
147
+
Ici, dans les deux lignes, nous utilisons d'abord le point (`user1.admin`) pour obtenir la propriété `admin`, car l'objet utilisateur doit exister, donc il peut être lu en toute sécurité.
148
+
Puis `?.()` Vérifie la partie gauche : si la fonction admin existe, alors elle s'exécute (c'est le cas pour `user1`). Sinon (pour `user2`) l'évaluation s'arrête sans erreur.
149
+
129
150
130
151
La syntaxe `?.[]` Fonctionne également, si nous voulons utiliser des crochets `[]` pour accéder aux propriétés au lieu du point `.`. Similaire aux cas précédents, il permet de lire en toute sécurité une propriété à partir d'un objet qui peut ne pas exister.
131
152
@@ -150,28 +171,34 @@ Nous pouvons également utiliser `?.` avec `delete` :
150
171
delete user?.name; // supprime user.name si user existe
151
172
```
152
173
174
+
153
175
```warn header="Nous pouvons utiliser `?.` pour lire et supprimer en toute sécurité, mais pas pour écrire"
154
176
Le chaînage optionnel `?.` n'a aucune utilité sur le côté gauche d'une affectation :
155
177
178
+
179
+
For example:
156
180
```js run
157
-
// l'idée du code ci-dessous est d'écrire user.name, si l'utilisateur existe
181
+
182
+
let user = null;
158
183
159
184
user?.name = "John"; // Erreur, ne fonctionne pas
160
185
// car il évalue à undefined = "John"
161
186
```
187
+
Ce n'est tout simplement pas si intelligent.
162
188
163
189
## Résumé
164
190
165
-
La syntaxe `?.`A trois formes :
191
+
Le chaînage optionnel '?.' A trois formes :
166
192
167
193
1. `obj?.prop` -- retourne `obj.prop` si `obj` existe, sinon `undefined`.
168
194
2. `obj?.[prop]` -- retourne `obj[prop]` si `obj` existe, sinon `undefined`.
169
-
3.`obj?.method()`-- appel `obj.method()` si `obj` existe, sinon retourne `undefined`.
Comme nous pouvons le voir, tous sont simples et simples à utiliser. Le `?.` vérifie la partie gauche pour `nul/undefined` et permet à l'évaluation de se poursuivre si ce n'est pas le cas.
172
199
173
200
Une chaîne de `?.` permet d'accéder en toute sécurité aux propriétés imbriquées.
174
201
175
-
Néanmoins, nous devons appliquer `?.` Avec soin, uniquement là où il est normal que la partie gauche n'existe pas.
176
202
177
-
Pour qu'il ne nous cache pas les erreurs de programmation, si elles se produisent.
203
+
Néanmoins, nous devons appliquer «?.» Avec soin, uniquement s'il est acceptable que la partie gauche n'existe pas. Pour ne pas nous cacher les erreurs de programmation, si elles se produisent.
Copy file name to clipboardExpand all lines: 1-js/05-data-types/03-string/article.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -111,7 +111,11 @@ alert( 'I*!*\'*/!*m the Walrus!' ); // *!*I'm*/!* the Walrus!
111
111
112
112
Comme vous pouvez le constater, nous devons précéder le simple quote intérieure du backslash `\'`, sinon, cela indiquerait la fin de la chaîne de caractères.
113
113
114
+
<<<<<<< HEAD
114
115
Bien sûr, il ne faut échapper que les guillemets identiques à ceux qui les entourent. Donc, comme solution plus élégante, nous pourrions passer aux guillemets doubles ou aux backticks :
116
+
=======
117
+
Of course, only the quotes that are the same as the enclosing ones need to be escaped. So, as a more elegant solution, we could switch to double quotes or backticks instead:
118
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
115
119
116
120
```js run
117
121
alert( `I'm the Walrus!` ); // I'm the Walrus!
@@ -316,7 +320,11 @@ if (str.indexOf("Widget") != -1) {
316
320
#### L'astuce du NON binaire
317
321
L’un des vieux trucs utilisés ici est l'opérateur [NON binaire](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Op%C3%A9rateurs/Op%C3%A9rateurs_binaires#(NON_binaire))`~`. Il convertit le nombre en un entier de 32 bits (supprime la partie décimale, s'elle existe), puis inverse tous les bits de sa représentation binaire.
318
322
323
+
<<<<<<< HEAD
319
324
Pour les entiers 32 bits, l'appel `~n` signifie exactement la même chose que `-(n+1)` (en raison du format IEEE-754).
325
+
=======
326
+
One of the old tricks used here is the [bitwise NOT](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT)`~` operator. It converts the number to a 32-bit integer (removes the decimal part if exists) and then reverses all bits in its binary representation.
327
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
320
328
321
329
En pratique, cela signifie une chose simple: pour les entiers 32 bits, `~n` est égal à `-(n + 1)`.
322
330
@@ -349,7 +357,11 @@ Il n'est généralement pas recommandé d'utiliser les fonctionnalités du langa
349
357
350
358
Rappelez-vous juste que : `if (~str.indexOf(...))` se lit "si trouvé".
351
359
360
+
<<<<<<< HEAD
352
361
Pour être précis cependant, les grands nombres sont tronqués à 32 bits par l'opérateur `~`. Il existe donc d'autres gros nombres qui donnent `0`, le plus petit correspondant à `~4294967295 = 0`. Cela rend cette vérification est correcte que si une chaîne n'est pas si longue.
362
+
=======
363
+
To be precise though, as big numbers are truncated to 32 bits by `~` operator, there exist other numbers that give `0`, the smallest is `~4294967295=0`. That makes such check correct only if a string is not that long.
364
+
>>>>>>> 0599d07b3c13ee25f583fc091cead3c17a7e7779
353
365
354
366
Pour le moment, nous ne voyons cette astuce que dans l'ancien code, car JavaScript fournit une méthode `.includes` (voir ci-dessous).
0 commit comments