117 votes

console.log() montre la valeur modifiée d'une variable avant que la valeur ne change réellement.

Ce bout de code, je le comprends. Nous faisons une copie de A et l'appelons C. Quand A est modifié, C reste le même.

var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1

Mais lorsque A est un tableau, la situation est différente. Non seulement C change, mais il change avant même que nous touchions à A.

var A = [2, 1];
var C = A;
console.log(C); // [1, 2]
A.sort();
console.log(C); // [1, 2]

Quelqu'un peut-il expliquer ce qui s'est passé dans le deuxième exemple ?

0voto

Danielozzo Points 1

Le problème est également présent dans Safari. Comme d'autres l'ont souligné dans cette question et dans d'autres questions similaires, la console reçoit une référence à l'objet, elle imprime la valeur de l'objet au moment où la console a été ouverte. Si vous exécutez le code directement dans la console, par exemple, les valeurs s'impriment comme prévu. Au lieu d'utiliser la chaîne JSON, je préfère étaler des tableaux (par exemple, dans votre cas console.log([...C]) ; ) et des objets : le résultat est tout à fait le même, mais le code est un peu plus propre. J'ai deux Extraits de code VS à partager.

    "Print object value to console": {
      "prefix": "clo",
      "body": [
         "console.log(\"Spread object: \", {...$0});"
      ],
      "description": "Prints object value instead of reference to console, to avoid console.log async update"
   },
   "Print array value to console": {
      "prefix": "cla",
      "body": [
         "console.log(\"Spread array: \", [...$0]);"
      ],
      "description": "Prints array value instead of reference to console, to avoid console.log async update"
   }

Afin d'obtenir le même résultat qu'avec console.log( JSON.parse(JSON.stringify(c)))) vous pouvez laisser de côté la partie cordes si vous le souhaitez. Par ailleurs, le syntaxe de l'étalement permet souvent d'économiser du temps et du code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X