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
+25-71Lines changed: 25 additions & 71 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,28 +3,24 @@
3
3
4
4
Que se passe-t-il lorsque des objets sont ajoutés `obj1 + obj2`, soustraits `obj1 - obj2` ou imprimés à l'aide de `alert (obj)` ?
5
5
6
-
<<<<<<< HEAD
7
-
Dans ce cas, les objets sont automatiquement convertis en primitives, puis l'opération est effectuée.
8
-
=======
9
-
JavaScript doesn't exactly allow to customize how operators work on objects. Unlike some other programming languages, such as Ruby or C++, we can't implement a special object method to handle an addition (or other operators).
6
+
JavaScript ne permet pas exactement de personnaliser le fonctionnement des opérateurs sur les objets. Contrairement à certains autres langages de programmation, tels que Ruby ou C++, nous ne pouvons pas implémenter une méthode objet spéciale pour gérer un ajout (ou d'autres opérateurs).
10
7
11
-
In case of such operations, objects are auto-converted to primitives, and then the operation is carried out over these primitives and results in a primitive value.
8
+
Dans le cas de telles opérations, les objets sont auto-convertis en primitives, puis l'opération est effectuée sur ces primitives et aboutit à une valeur primitive.
12
9
13
-
That's an important limitation, as the result of`obj1 + obj2`can't be another object!
10
+
C'est une limitation importante, car le résultat de`obj1 + obj2`ne peut pas être un autre objet !
14
11
15
-
E.g. we can't make objects representing vectors or matrices (or achievements or whatever), add them and expect a "summed" object as the result. Such architectural feats are automatically "off the board".
12
+
Par exemple. nous ne pouvons pas créer d'objets représentant des vecteurs ou des matrices (ou des réalisations ou autre), les ajouter et s'attendre à un objet "sommé" comme résultat. De telles prouesses architecturales sont automatiquement "hors jeu".
16
13
17
-
So, because we can't do much here, there's no maths with objects in real projects. When it happens, it's usually because of a coding mistake.
14
+
Donc, parce que nous ne pouvons pas faire grand-chose ici, il n'y a pas de maths avec des objets dans de vrais projets. Lorsque cela se produit, c'est généralement à cause d'une erreur de codage.
18
15
19
-
In this chapter we'll cover how an object converts to primitive and how to customize it.
16
+
Dans ce chapitre, nous verrons comment un objet se convertit en primitif et comment le personnaliser.
20
17
21
-
We have two purposes:
18
+
Nous avons deux objectifs :
22
19
23
-
1.It will allow us to understand what's going on in case of coding mistakes, when such an operation happened accidentally.
24
-
2.There are exceptions, where such operations are possible and look good. E.g. subtracting or comparing dates (`Date` objects). We'll come across them later.
20
+
1.Cela nous permettra de comprendre ce qui se passe en cas d'erreur de codage, lorsqu'une telle opération s'est produite accidentellement.
21
+
2.Il existe des exceptions, où de telles opérations sont possibles et semblent bonnes. Par exemple. soustraire ou comparer des dates (objets `Date`). Nous les verrons plus tard.
25
22
26
-
## Conversion rules
27
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
23
+
## Règles de conversion
28
24
29
25
Dans le chapitre <info:type-conversions> nous avons vu les règles pour les conversions numériques, chaînes et booléennes de primitives. Mais nous avions mis de côté les objets. Maintenant que nous connaissons les méthodes et les symboles, il devient possible de l'aborder.
30
26
@@ -35,19 +31,9 @@ Pour les objets, il n’y a pas de conversion to-boolean, car tous les objets so
35
31
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.
36
32
37
33
38
-
<<<<<<< HEAD
39
-
## ToPrimitive
40
-
41
34
Nous pouvons affiner la conversion de chaînes de caractères et de chiffres en utilisant des méthodes d’objet spéciales.
42
35
43
36
Il existe trois variantes de conversion de type, appelées "hints", décrites dans la [specification](https://tc39.github.io/ecma262/#sec-toprimitive) :
44
-
=======
45
-
We can fine-tune string and numeric conversion, using special object methods.
46
-
47
-
There are three variants of type conversion, that happen in various situations.
48
-
49
-
They're called "hints", as described in the [specification](https://tc39.github.io/ecma262/#sec-toprimitive):
50
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
51
37
52
38
53
39
**`"string"`**
@@ -118,24 +104,15 @@ Commençons par la première méthode. Il existe un symbole intégré appelé `S
118
104
119
105
```js
120
106
obj[Symbol.toPrimitive] = function(hint) {
121
-
<<<<<<< HEAD
122
-
// doit renvoyer une valeur primitive
123
-
// hint = un parmi "string", "number", "default"
107
+
// voici le code pour convertir cet objet en une primitive
108
+
// il doit retourner une valeur primitive
109
+
// hint = un de "string", "number", "default"
124
110
};
125
111
```
126
112
127
-
Par exemple, ici l'objet `user` l'implémente :
128
-
=======
129
-
// here goes the code to convert this object to a primitive
130
-
// it must return a primitive value
131
-
// hint = one of "string", "number", "default"
132
-
};
133
-
```
113
+
Si la méthode `Symbol.toPrimitive` existe, elle est utilisée pour tous les hints et aucune autre méthode n'est nécessaire.
134
114
135
-
If the method `Symbol.toPrimitive` exists, it's used for all hints, and no more methods are needed.
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.
158
135
159
136
160
-
## toString/valueOf
161
-
162
-
<<<<<<< HEAD
163
-
Méthodes `toString` et `valueOf` proviennent des temps anciens. Ce ne sont pas des symboles (les symboles n'existaient pas il n'y a pas si longtemps), mais plutôt des méthodes "régulières" avec des noms de chaînes de caractères. Ils fournissent une méthode alternative "à l'ancienne" pour implémenter la conversion.
137
+
## toString / valueOf
164
138
165
-
S'il n'y a pas de `Symbol.toPrimitive`, alors JavaScript essaye de les trouver et essaie dans l'ordre :
139
+
S'il n'y a pas de `Symbol.toPrimitive` alors JavaScript essaie de trouver les méthodes `toString` et `valueOf`:
166
140
167
-
-`toString -> valueOf` pour le hint "string".
168
-
-`valueOf -> toString` sinon.
169
-
=======
170
-
If there's no `Symbol.toPrimitive` then JavaScript tries to find methods `toString` and `valueOf`:
141
+
- Pour le hint "string" : `toString`, et s'il n'existe pas, alors `valueOf` (donc `toString` a la priorité pour les conversions de chaînes de caractères).
142
+
- Pour d'autres hints : `valueOf`, et s'il n'existe pas, alors `toString` (donc `valueOf` a la priorité pour les mathématiques).
171
143
172
-
- For the "string" hint: `toString`, and if it doesn't exist, then `valueOf` (so `toString` has the priority for string conversions).
173
-
- For other hints: `valueOf`, and if it doesn't exist, then `toString` (so `valueOf` has the priority for maths).
174
-
175
-
Methods `toString` and `valueOf` come from ancient times. They are not symbols (symbols did not exist that long ago), but rather "regular" string-named methods. They provide an alternative "old-style" way to implement the conversion.
176
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
144
+
Les méthodes `toString` et `valueOf` viennent des temps anciens. Ce ne sont pas des symboles (les symboles n'existaient pas il y a si longtemps), mais plutôt des méthodes nommées par des chaînes de caractères "normales". Ils fournissent une alternative "à l'ancienne" pour implémenter la conversion.
177
145
178
146
Ces méthodes doivent renvoyer une valeur primitive. Si `toString` ou `valueOf` renvoie un objet, il est ignoré (comme s'il n'y avait pas de méthode).
Donc, si nous essayons d'utiliser un objet en tant que chaîne de caractères, comme dans un `alert` ou autre chose, nous voyons par défaut `[object Object]`.
195
163
196
-
<<<<<<< HEAD
197
-
Et la valeur par défaut `valueOf` n'est mentionnée ici que par souci d'exhaustivité, afin d'éviter toute confusion. Comme vous pouvez le constater, l'objet est renvoyé et est donc ignoré. Ne me demandez pas pourquoi, c'est pour des raisons historiques. Nous pouvons donc supposer que cela n'existe pas.
198
-
199
-
Implémentons ces méthodes.
200
-
=======
201
-
The default `valueOf` is mentioned here only for the sake of completeness, to avoid any confusion. As you can see, it returns the object itself, and so is ignored. Don't ask me why, that's for historical reasons. So we can assume it doesn't exist.
164
+
Et la valeur par défaut `valueOf` n'est mentionnée ici que par souci d'exhaustivité, afin d'éviter toute confusion. Comme vous pouvez le constater, l'objet lui-même est renvoyé et est donc ignoré. Ne me demandez pas pourquoi, c'est pour des raisons historiques. Nous pouvons donc supposer que cela n'existe pas.
202
165
203
-
Let's implement these methods to customize the conversion.
204
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
166
+
Implémentons ces méthodes pour personnaliser la conversion.
205
167
206
168
Par exemple, ici, `user` fait la même chose que ci-dessus en combinant `toString` et `valueOf` au lieu de `Symbol.toPrimitive` :
En l'absence de `Symbol.toPrimitive` et de `valueOf`, `toString` gérera toutes les conversions primitives.
248
210
249
-
<<<<<<< HEAD
250
-
## Retourner des types
251
-
=======
252
-
### A conversion can return any primitive type
253
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
211
+
### Une conversion peut renvoyer n'importe quel type primitif
254
212
255
213
La chose importante à savoir sur toutes les méthodes de conversion de primitives est qu'elles ne renvoient pas nécessairement la primitive "hinted".
256
214
@@ -319,10 +277,6 @@ L'algorithme de conversion est :
319
277
3. Sinon, si l'indice est `"number"` ou `"default"`
320
278
- essaie `obj.valueOf()` et `obj.toString()`, tout ce qui existe.
321
279
322
-
<<<<<<< HEAD
323
-
En pratique, il suffit souvent d’implémenter uniquement `obj.toString()` en tant que méthode "fourre-tout" pour toutes les conversions qui renvoient une représentation "lisible par l’homme" d’un objet, à des fins de journalisation ou de débogage.
324
-
=======
325
-
In practice, it's often enough to implement only `obj.toString()` as a "catch-all" method for string conversions that should return a "human-readable" representation of an object, for logging or debugging purposes.
280
+
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.
326
281
327
-
As for math operations, JavaScript doesn't provide a way to "override" them using methods, so real life projects rarely use them on objects.
328
-
>>>>>>> 8558fa8f5cfb16ef62aa537d323e34d9bef6b4de
282
+
En ce qui concerne les opérations mathématiques, JavaScript ne fournit pas de moyen de les "remplacer" à l'aide de méthodes, de sorte que les projets réels les utilisent rarement sur des objets.
0 commit comments