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