Une fois qu'une promesse a été résolue, toute tentative de la résoudre à nouveau n'aura aucun effet, ce qui signifie que la valeur résolue aura toujours une égalité stricte avec la valeur résolue d'origine. Cela ne signifie pas, cependant, que la valeur ne peut pas changer, c'est-à-dire "n'implique pas une immutabilité profonde".
Cela peut être démontré par un exemple:
var value = [1];
var p = Promise.resolve(value);
p.then(a => console.log(a)); // [1]
p.then(a => console.log(a === value)); // true
p.then(a => { a = [2]; console.log(a);}); // [2]
p.then(a => console.log(a)); // [1]
p.then(a => { a[0] = 2; console.log(a);}); // [2]
p.then(a => console.log(a)); // [2]
p.then(a => console.log(a === value)); // true
Comme vous pouvez le voir la valeur retournée par la promesse résolue reste la même valeur de l'objet tout au long - a === value
. Les tentatives de lier l'objet à une valeur différente s'appliquent uniquement dans la portée du bloc then et nous voyons la valeur Object d'origine la prochaine fois que nous appelons la méthode then sur la promesse. Lorsque nous modifions la valeur d'une des propriétés de cette matrice, dans ce cas le premier élément, nous remarquons que cette modification affecte la valeur d'origine et donc aussi la valeur résolue renvoyée par cette promesse. Si la valeur résolue avait une immuabilité profonde alors toutes ses propriétés et leurs propriétés seraient immuables, cependant nous venons de montrer que ce n'est pas le cas.
Vous devez penser à la façon dont '===' fonctionne et ce qu'il fait pour établir si deux choses sont égales. –
Ou regardez comment 'const' fonctionne. Les valeurs 'const' ont une identité immuable mais ne sont pas profondément immuables. – Tex