Je comprends ce code. Nous copions A et l'appelons C. Lorsque A change, C reste inchangé
var A = 1; varC = 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 que nous touchions A
var A = [2, 1]; varC = A ; console.log(C); // [1, 2] Un tri(); console.log(C); // [1, 2]
Quelqu’un peut-il expliquer ce qui se passe dans le deuxième exemple ?
console.log()
transmettra uneréférenceà l'objet, donc la valeur dans la console changera à mesure que l'objet change. Pour éviter cela vous pouvez :Avertissement MDN:
La réponse de Pointyfournit de bonnes informations, mais ce n'est pas la bonne réponse à cette question.
Le comportement décrit par l'OP faisait partie d'un bug signalé pour la première fois en mars 2010 et corrigé pour Webkit en août 2012, mais n'a pas encore été intégré à Google Chrome au moment d'écrire ces lignes. Le comportement dépend si la fenêtre de débogage de la console est
console.log()
ouverteouferméelors du passage d'un objet littéral à.Extrait du rapport de bug original (https://bugs.webkit.org/show_bug .cgi?id=35801) :
Réponse du développeur Chromium :
De nombreuses plaintes ont suivi, qui ont finalement conduit à une correction de bug.
Description du journal des modifications pour le correctif implémenté en août 2012 (http://trac.webkit.org/changeset/ 125174) :