Pouvons-nous ajouter une propiété à une primitive ?
importance: 5
Considérons le code suivant:
let str = "Hello";
str.test = 5;
alert(str.test);
Qu’en pensez-vous, ça va marcher? Qu’est-ce qui sera montré?
Essayez de lancer:
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
Selon que vous utilisiez use strict
ou non, le résultat peut être :
undefined
(pas de mode strict)- une erreur (mode strict)
Pourquoi ? Répétons ce qui se pase à la ligne(*)
:
- Lorsqu’on accède à une propiété de
str
, un “wrapper d’objet” (conteneur) est créé. - En mode strict, l’écriture à l’intérieur est une erreur.
- Sinon, l’opération avec la propriété est poursuivie, l’objet obtient la propriété
test
, mais après cela, “l’objet wrapper” disparaît, de sorte que dans la dernière ligne,str
n’a aucune trace de la propriété.
Cet exemple montre clairement que les primitives ne sont pas des objets.
Ils ne peuvent pas stocker de données supplémentaires.