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/04-object-basics/09-object-toprimitive/article.md
+2-6Lines changed: 2 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,3 @@
1
-
2
1
# Conversion d'objet en primitive
3
2
4
3
Que se passe-t-il lorsque des objets sont ajoutés `obj1 + obj2`, soustraits `obj1 - obj2` ou imprimés à l'aide de `alert (obj)` ?
@@ -28,7 +27,6 @@ Dans le chapitre <info:type-conversions> nous avons vu les règles pour les conv
28
27
2. La conversion numérique se produit lorsque nous soustrayons des objets ou appliquons des fonctions mathématiques. Par exemple, les objets `Date` (à traiter dans le chapitre <info:date>) peut être soustrait et le résultat de `date1 - date2` est la différence de temps entre deux dates.
29
28
3. En ce qui concerne la conversion de chaîne de caractères - cela se produit généralement lorsque nous affichons un objet tel que `alert (obj)` et dans des contextes similaires.
30
29
31
-
32
30
Nous pouvons implémenter nous-mêmes la conversion de chaînes de caractères et de chiffres, en utilisant des méthodes d'objet spéciales.
33
31
34
32
Passons maintenant aux détails techniques, car c'est le seul moyen d'aborder le sujet en profondeur.
@@ -41,7 +39,6 @@ Il existe trois variantes de conversion de type, qui se produisent dans diverses
41
39
42
40
Il existe trois variantes de conversion de type, appelées "hints", décrites dans la [specification](https://tc39.github.io/ecma262/#sec-toprimitive) :
43
41
44
-
45
42
**`"string"`**
46
43
47
44
Pour une conversion d'un objet vers une chaîne de caractères, lorsque nous effectuons une opération sur un objet qui attend une chaîne, comme `alert` :
@@ -54,7 +51,6 @@ alert(obj);
54
51
anotherObj[obj] =123;
55
52
```
56
53
57
-
58
54
**`"number"`**
59
55
60
56
Pour une conversion d'objet en nombre, comme lorsque nous faisons des calculs :
Comme on peut le voir d'après le code, `user` devient une chaîne de caractères auto-descriptive ou un montant d'argent en fonction de la conversion. La méthode unique `user[Symbol.toPrimitive]` gère tous les cas de conversion.
141
137
142
-
143
138
## toString / valueOf
144
139
145
140
S'il n'y a pas de `Symbol.toPrimitive` alors JavaScript essaie de trouver les méthodes `toString` et `valueOf` :
@@ -233,6 +228,7 @@ En revanche, `Symbol.toPrimitive` est plus strict, il *doit* retourner une primi
233
228
Comme nous le savons déjà, de nombreux opérateurs et fonctions effectuent des conversions de types, par exemple la multiplication `*` convertit les opérandes en nombres.
234
229
235
230
Si nous passons un objet en argument, il y a deux étapes de calcul :
231
+
236
232
1. L'objet est converti en primitive (en utilisant les règles décrites ci-dessus).
237
233
2. Si cela est nécessaire pour d'autres calculs, la primitive résultante est également convertie.
238
234
@@ -269,6 +265,7 @@ alert(obj + 2); // 22 ("2" + 2), la conversion en primitive a renvoyé une chaî
269
265
La conversion objet à primitive est appelée automatiquement par de nombreuses fonctions intégrées et opérateurs qui attendent une primitive en tant que valeur.
270
266
271
267
Il en existe 3 types (hints) :
268
+
272
269
-`"string"` (pour `alert` et d'autres opérations qui nécessitent une chaîne de caractères)
273
270
-`"number"` (pour des maths)
274
271
-`"default"` (peu d'opérateurs, généralement des objets l'implémentent de la même manière que `"number"`)
@@ -286,4 +283,3 @@ L'algorithme de conversion est :
286
283
Toutes ces méthodes doivent renvoyer une primitive pour fonctionner (si elle est définie).
287
284
288
285
En pratique, il suffit souvent d'implémenter uniquement `obj.toString()` comme méthode "fourre-tout" pour les conversions de chaînes de caractères qui devraient renvoyer une représentation "lisible par l'homme" d'un objet, à des fins de journalisation ou de débogage.
0 commit comments