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
La raison en est que l'invite renvoie l'entrée utilisateur sous forme de chaîne.
2
+
3
+
Les variables ont donc respectivement les valeurs `"1"` et `"2"`.
4
+
5
+
```js run
6
+
let a ="1"; // prompt("First number?", 1);
7
+
let b ="2"; // prompt("Second number?", 2);
8
+
9
+
alert(a + b); // 12
10
+
```
11
+
12
+
Ce que nous devons faire est de convertir les chaînes en nombres avant `+`. Par exemple, en utilisant `Number ()` ou en les ajoutant au début avec `+`.
13
+
14
+
Par exemple, juste avant `prompt`:
15
+
16
+
```js run
17
+
let a =+prompt("First number?", 1);
18
+
let b =+prompt("Second number?", 2);
19
+
20
+
alert(a + b); // 3
21
+
```
22
+
23
+
Ou dans l'`alert`:
24
+
25
+
```js run
26
+
let a =prompt("First number?", 1);
27
+
let b =prompt("Second number?", 2);
28
+
29
+
alert(+a ++b); // 3
30
+
```
31
+
32
+
Nous utilisons à la fois unaire et binaire `+` dans le dernier code. Ça a l'air drôle, non?
De nombreux opérateurs nous sont connus de l'école. Ce sont les additions `+`, multiplications `*`, soustractions `-` et ainsi de suite.
3
+
De nombreux opérateurs nous sont connus de l'école. Ce sont les additions `+`, multiplications `*`, soustractions `-` et ainsi de suite.
4
4
5
5
Dans ce chapitre, nous nous concentrons sur les aspects qui ne sont pas couverts par l'arithmétique scolaire.
6
6
@@ -19,7 +19,7 @@ Avant de continuer, saisissons la terminologie commune.
19
19
*/!*
20
20
alert( x ); // -1, le moins unaire a été appliqué
21
21
```
22
-
- Un opérateur est `binaire` s'il a deux opérandes. La même négation existe également dans la forme binaire :
22
+
- Un opérateur est *binaire* s'il a deux opérandes. La même négation existe également dans la forme binaire :
23
23
24
24
```js run no-beautify
25
25
let x = 1, y = 3;
@@ -28,6 +28,52 @@ Avant de continuer, saisissons la terminologie commune.
28
28
29
29
D'un point de vue formel, dans les exemples ci-dessus, nous avons deux opérateurs différents qui partagent le même symbole : l'opérateur de négation, un opérateur unaire qui inverse le signe, et l'opérateur de soustraction, un opérateur binaire qui soustrait un nombre d'un autre.
30
30
31
+
## Opérations mathématiques
32
+
33
+
Les opérations mathématiques suivantes sont supportées :
34
+
35
+
- Addition `+`,
36
+
- Soustraction `-`,
37
+
- Multiplication `*`,
38
+
- Division `/`,
39
+
- Reste `%`,
40
+
- Exponentiation `**`.
41
+
42
+
Les quatre premières sont assez simples, tandis que `%` et `**` nécéssitent quelques explications.
43
+
44
+
### Reste % (Modulo)
45
+
46
+
L'opérateur reste `%`, malgré son apparence, n'est pas lié aux pourcentages.
47
+
48
+
Le résultat de `a % b` est le [reste](https://fr.wikipedia.org/wiki/Reste) de la division entière de `a` par `b`.
Mathématiquement, l'exponentiation est également définie pour les nombres non entiers. Par exemple, une racine carrée est une exponentiation de `1/2`:
70
+
71
+
```js run
72
+
alert( 4 ** (1/2) ); // 2 (la puissance de 1/2 équivaut à une racine carrée)
73
+
alert( 8 ** (1/3) ); // 2 (la puissance de 1/3 équivaut à une racine cubique)
74
+
```
75
+
76
+
31
77
## Concaténation de chaînes de caractères, binaire `+`
32
78
33
79
Voyons maintenant les caractéristiques spéciales des opérateurs JavaScript qui sont au-delà de l’arithmétique scolaire.
@@ -56,23 +102,24 @@ Cependant, notez que les opérations se déroulent de gauche à droite. S'il y a
56
102
57
103
58
104
```js run
59
-
alert(2 + 2 + '1' ); // "41" and not "221"
105
+
alert(2 + 2 + '1' ); // "41" et non "221"
60
106
```
61
107
62
-
La concaténation et la conversion en chaînes de caractères sont une caractéristique particulière du binaire plus `+`. Les autres opérateurs arithmétiques ne travaillent qu'avec des nombres. Ils convertissent toujours leurs opérandes en nombres.
108
+
Ici, les opérateurs travaillent les uns après les autres. Le premier `+` additionne deux nombres, donc il renvoie `4`, puis le `+` suivant ajoute la chaîne `1`, donc c'est comme `4 + '1' = 41`.
63
109
64
-
Par exemple, soustraction et division :
110
+
Le binaire `+` est le seul opérateur qui prend en charge les chaînes de cette manière. D'autres opérateurs arithmétiques ne fonctionnent qu'avec des nombres et convertissent toujours leurs opérandes en nombres.
65
111
112
+
Voici l'exemple pour la soustraction et la division:
66
113
```js run
67
-
alert( 2 - '1' ); // 1
68
-
alert( '6' / '2' ); // 3
114
+
alert( 6 - '2' ); // 4, convertit '2' en nombre
115
+
alert( '6' / '2' ); // 3, convertit les deux opérandes en nombres
69
116
```
70
117
71
118
## Conversion numérique, unaire +
72
119
73
120
Le plus `+` existe sous deux formes. La forme binaire que nous avons utilisée ci-dessus et la forme unaire.
74
121
75
-
L’unaire plus ou, en d’autres termes, l’opérateur plus `+` appliqué à une seule valeur, ne fait rien avec les nombres, mais si l’opérande n’est pas un nombre, alors il est converti en nombre.
122
+
L’unaire plus ou, en d’autres termes, l’opérateur plus `+` appliqué à une seule valeur, ne fait rien avec les nombres, mais si l’opérande n’est pas un nombre, alors il est convertit en nombre.
76
123
77
124
Par exemple :
78
125
@@ -95,7 +142,6 @@ En fait, il fait la même chose que `Number(...)`, mais il est plus court.
95
142
96
143
La nécessité de convertir des chaînes de caractères en nombres est très fréquente. Par exemple, si nous obtenons des valeurs à partir de champs de formulaire HTML, il s’agit généralement de chaînes de caractères. Et si on veut les additionner ?
97
144
98
-
99
145
Le binaire plus les ajouterait comme des chaînes de caractères :
100
146
101
147
```js run
@@ -141,6 +187,7 @@ Un extrait du [tableau de précédence](https://developer.mozilla.org/fr/docs/We
141
187
| ... | ... | ... |
142
188
| 17 | plus unaire |`+`|
143
189
| 17 | négation unaire |`-`|
190
+
| 16 | exponentiation |`**`|
144
191
| 15 | multiplication |`*`|
145
192
| 15 | division |`/`|
146
193
| 13 | addition |`+`|
@@ -163,28 +210,15 @@ let x = 2 * 2 + 1;
163
210
alert( x ); // 5
164
211
```
165
212
166
-
Il est possible de chaîner des affectations :
167
-
168
-
```js run
169
-
let a, b, c;
170
-
171
-
*!*
172
-
a = b = c =2+2;
173
-
*/!*
174
-
175
-
alert( a ); // 4
176
-
alert( b ); // 4
177
-
alert( c ); // 4
178
-
```
213
+
### Assignment = retourne une valeur
179
214
180
-
Les affectations en chaîne sont évaluées de droite à gauche. D'abord, l'expression la plus à droite `2 + 2` est évaluée puis assignée aux variables de gauche: `c`, `b` et `a`. À la fin, toutes les variables partagent une seule valeur.
215
+
Le fait que `=` soit un opérateur, pas une construction de langage "magique" a une implication intéressante.
181
216
182
-
````smart header="L'opérateur d'affectation `\"=\"` renvoie une valeur"
183
-
Un opérateur retourne toujours une valeur. C’est évident pour la plupart d’entre eux, comme une addition `+` ou une multiplication `*`. Mais l'opérateur d'affectation suit également cette règle.
217
+
La plupart des opérateurs en JavaScript renvoient une valeur. C'est évident pour `+` et `-`, mais aussi vrai pour `=`.
184
218
185
-
L'appel `x = valeur` écrit la valeur dans `x` puis `la retourne`.
219
+
L'appel `x = valeur` écrit la` valeur` dans `x`*puis la renvoie*.
186
220
187
-
Voici un exemple qui utilise une affectation dans le cadre d'une expression plus complexe:
221
+
Voici un exemple qui utilise une affectation dans le cadre d'une expression plus complexe:
188
222
189
223
```js run
190
224
let a =1;
@@ -198,46 +232,71 @@ alert( a ); // 3
198
232
alert( c ); // 0
199
233
```
200
234
201
-
Dans l'exemple ci-dessus, le résultat de `(a = b + 1)` est la valeur attribuée à `a` (c'est-à-dire `3`). Il est ensuite utilisé pour d'autres évaluations.
202
-
203
-
Code drôle, n'est-ce pas ? Nous devrions comprendre comment cela fonctionne, car parfois nous pouvons le voir dans des bibliothèques tierces, mais nous ne devrions pas écrire quoi que ce soit de similaire nous-mêmes. De telles astuces ne permettent pas de rendre le code plus clair et lisible.
204
-
````
235
+
Dans l'exemple ci-dessus, le résultat de l'expression`(a = b + 1)` est la valeur qui a été affectée à `a` (c'est-à-dire `3`). Il est ensuite utilisé pour d'autres évaluations.
205
236
206
-
## Reste % (Modulo)
237
+
Drôle de code, n'est-ce pas? Nous devons comprendre comment cela fonctionne, car parfois nous le voyons dans les bibliothèques JavaScript.
207
238
208
-
L'opérateur reste `%` malgré son apparence n'a pas de relation avec les pourcentages.
239
+
Cependant, n'écrivez pas le code comme ça. De telles astuces ne rendent certainement pas le code plus clair ou lisible.
209
240
210
-
Le résultat de `a % b` est le reste de la division entière de `a` par `b`.
241
+
### Affectations chaînées
211
242
212
-
Par exemple :
243
+
Une autre caractéristique intéressante est la possibilité de chaîner des affectations :
213
244
214
245
```js run
215
-
alert( 5 % 2 ); // 1 est le reste de 5 divisé par 2
216
-
alert( 8 % 3 ); // 2 est le reste de 8 divisé par 3
217
-
alert( 6 % 3 ); // 0 est le reste de 6 divisé par 3
246
+
let a, b, c;
247
+
248
+
*!*
249
+
a = b = c =2+2;
250
+
*/!*
251
+
252
+
alert( a ); // 4
253
+
alert( b ); // 4
254
+
alert( c ); // 4
218
255
```
219
256
220
-
## Exponentiation **
257
+
Les affectations en chaîne sont évaluées de droite à gauche. D'abord, l'expression la plus à droite `2 + 2` est évaluée puis assignée aux variables de gauche: `c`, `b` et `a`. À la fin, toutes les variables partagent une seule valeur.
221
258
222
-
L'opérateur d'exponentiation `**` est un ajout récent au langage.
259
+
Encore une fois, pour des raisons de lisibilité, il est préférable de diviser ce code en quelques lignes:
223
260
224
-
Pour un entier naturel `b`, le résultat de `a ** b` est `a` multiplié par lui-même `b`fois.
261
+
```js
262
+
c =2+2;
263
+
b = c;
264
+
a = c;
265
+
```
266
+
C'est plus facile à lire, en particulier lors de la numérisation rapide du code.
267
+
268
+
## Modification sur place
269
+
270
+
Nous avons souvent besoin d'appliquer un opérateur à une variable et d'y stocker le nouveau résultat.
225
271
226
272
Par exemple :
227
273
274
+
```js
275
+
let n =2;
276
+
n = n +5;
277
+
n = n *2;
278
+
```
279
+
280
+
Cette notation peut être raccourcie en utilisant les opérateurs `+=` et `*=` :
281
+
228
282
```js run
229
-
alert( 2 ** 2 ); // 4 (2 * 2)
230
-
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
231
-
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
283
+
let n =2;
284
+
n +=5; // maintenant n = 7 (identique à n = n + 5)
285
+
n *=2; // maintenant n = 14 (identique à n = n * 2)
286
+
287
+
alert( n ); // 14
232
288
```
233
289
234
-
L'opérateur travaille également pour les nombres non entiers.
290
+
Il existe de opérateurs de "modification et assignation" courts pour tous les opérateurs arithmétiques et binaires: `/=`, `-=` etc.
235
291
236
-
Par exemple :
292
+
Ces opérateurs ont la même précédence qu'une affectation normale. Ils s'exécutent donc après la plupart des autres calculs :
237
293
238
294
```js run
239
-
alert( 4 ** (1/2) ); // 2 (puissance de 1/2 est la même chose qu'une racine carrée, c'est des maths)
240
-
alert( 8 ** (1/3) ); // 2 (la puissance de 1/3 est la même que celle d'une racine cubique)
295
+
let n =2;
296
+
297
+
n *=3+5;
298
+
299
+
alert( n ); // 16 (partie droite évaluée en premier, identique à n *= 8)
241
300
```
242
301
243
302
## Incrémentation / décrémentation
@@ -287,7 +346,7 @@ let a = ++counter; // (*)
287
346
alert(a); // *!*2*/!*
288
347
```
289
348
290
-
Ici, dans la ligne `(*)`, l'appel du préfixe `++counter` incrémente le compteur et retourne la nouvelle valeur qui est 2. Ainsi, l'alerte affiche 2.
349
+
Ici, dans la ligne `(*)`, l'appel du *préfixe*`++counter` incrémente le compteur et retourne la nouvelle valeur qui est `2`. Ainsi, l'`alert` affiche `2`.
291
350
292
351
Maintenant, utilisons la forme postfixe :
293
352
@@ -298,7 +357,7 @@ let a = counter++; // (*) changé ++counter pour counter++
298
357
alert(a); // *!*1*/!*
299
358
```
300
359
301
-
Dans la ligne `(*)`, la forme postfixe `counter++` incrémente également `counter`, mais renvoie l'**ancienne** valeur (avant l'incrémentation). Donc, l'`alert` montre 1.
360
+
Dans la ligne `(*)`, la forme postfixe `counter++` incrémente également `counter`, mais renvoie l'*ancienne*valeur (avant l'incrémentation). Donc, l'`alert` montre `1`.
302
361
303
362
Pour résumer :
304
363
@@ -371,40 +430,6 @@ La liste des opérateurs :
371
430
372
431
Ces opérateurs sont très rarement utilisés. Pour les comprendre, nous devrions nous intéresser à la représentation numérique de bas niveau, et il ne serait pas optimal de le faire dès maintenant. Surtout parce que nous n’en aurons pas besoin de sitôt. Si vous êtes curieux, vous pouvez lire l'article [Opérateurs binaires](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Op%C3%A9rateurs/Op%C3%A9rateurs_binaires) sur MDN. Il serait plus pratique de le faire quand un besoin réel se fait sentir.
373
432
374
-
## Modification sur place
375
-
376
-
Nous avons souvent besoin d'appliquer un opérateur à une variable et d'y stocker le nouveau résultat.
377
-
378
-
Par exemple :
379
-
380
-
```js
381
-
let n =2;
382
-
n = n +5;
383
-
n = n *2;
384
-
```
385
-
386
-
Cette notation peut être raccourcie en utilisant les opérateurs `+=` et `*=` :
387
-
388
-
```js run
389
-
let n =2;
390
-
n +=5; // maintenant n = 7 (identique à n = n + 5)
391
-
n *=2; // maintenant n = 14 (identique à n = n * 2)
392
-
393
-
alert( n ); // 14
394
-
```
395
-
396
-
Il existe de opérateurs de "modification et assignation" courts pour tous les opérateurs arithmétiques et binaires: `/=`, `-=` etc.
397
-
398
-
Ces opérateurs ont la même précédence qu'une affectation normale. Ils s'exécutent donc après la plupart des autres calculs :
399
-
400
-
```js run
401
-
let n =2;
402
-
403
-
n *=3+5;
404
-
405
-
alert( n ); // 16 (partie droite évaluée en premier, identique à n *= 8)
406
-
```
407
-
408
433
## Virgule
409
434
410
435
L'opérateur virgule `,` est l'un des opérateurs les plus rares et les plus inhabituels. Parfois, il faut écrire un code plus court, il faut donc le connaître pour comprendre ce qui se passe.
0 commit comments