J'ai utilisé JavaScript pendant des années et celui-ci m'a perplexe. Comme je l'ai compris les choses, lors de la définition d'un var
, l'une des deux choses:javascript primitives vs références d'objet
- Si l'expression est une primitive,
var
est définie comme une nouvelle instance de cette primitive sans référence à l'expression passée. - Si l'expression est un littéral d'objet, un nouvel objet est créé.
- Si l'expression est un objet existant,
var
fera référence à l'objet et toutes les modifications futures de l'objet seront reflétées.
Cependant, j'ai couru dans une situation où le cas 3 ne s'applique pas:
var obj = {body: {'a': 1, 'b': 2, 'c': 3}};
var ref = obj.body;
ref = JSON.stringify(ref);
console.log(typeof ref); // string
console.log(typeof obj.body); // object
Depuis ref
est définie comme la propriété body
de obj
, je pensais redéfinir ref
comme une chaîne aussi serait affecter obj.body
. Alors qu'est-ce qui me manque?
vous remplacez la variable, ça ne va pas changer ce qui est dans l'objet .... – epascarello
Je pense que la confusion vient du fait que 'ref = ...' ne mute pas l'objet vers lequel il pointe. Si vous avez muté 'ref' (en définissant' ref.a = 5' par exemple), vous verrez les mises à jour via les deux références. – Phylogenesis