Les appels consécutifs à console.log produisent des résultats incohérents

D'accord, je suis complètement stupéfait avec ça. (Et je pourrais regarder sur quelque chose d'évident mais …)

J'ai 2 appels consécutifs à console.log. Il n'y a rien d'autre entre eux

console.log($state); console.log($state.current); 

Et voici une image des résultats produits

Capture d'écran Console.log

Pourquoi les 2 produisent-ils différents objets "actuels"? Comment cela peut-il se produire?


Le contexte:

Ces appels sont effectués dans un appel ajax tout en résolvant les dépendances d'un itinéraire. Si vous avez besoin de plus de code ou de contexte, faites-le savoir.

Confirmé le même problème sur Chrome et Firefox

Fonction Ajax Call and wrapper (pas de modifications)

 normaCtrl.publicNorma = ['$http', '$state', '$stateParams', 'baseUrl', function ($http, $state, $stateParams, baseUrl) { var id = $stateParams.id; return $http.get(baseUrl + "api/public/norma/" + id).then( function (response) { console.log($state); console.log($state.current); console.log($state.current.title); return response.data; } ); }]; 

Questions connexes possibles

  • Javascript console.log affiche différentes valeurs sur le même objet

  • AngularJS: comportement de console.log étrange avec asynchrome chrome.storage.local.get ()

Eh bien, voici la réponse pour ceux qui se heurtent à cela.

Réponse courte

Console.log affiche des objets muets profondes au dernier état d'exécution , pas à l' état où on a appelé console.log .

Plus de détails

Fondamentalement, lorsque vous travaillez avec des objets profonds mutables, Console.log stocke la référence à cet objet au lieu de stocker un clone d'objet.

Étant donné qu'il existe un écart de temps entre le stockage et la visualisation, lorsque vous cliquez sur la flèche pour une inspection plus approfondie, ce que vous voyez est en fait l'état actuel de l'objet et non l'état de l'objet lorsque console.log était appelé .

Une façon de toujours vous assurer que vous utilisez un «instantané d'objet» est d'appeler Json.stringify ou d'utiliser console.dir lorsqu'il est disponible.

Bizarre. Est-ce un objet ECMA 5 qui a un getter étrange? Encore ne serait pas logique pour l'appel de l'état ordinaire. Je suppose qu'il n'y a pas que quelque chose de cassé avec votre GC …

Êtes-vous sûr que ces appels sont enregistrés?