Chrome displays different object contents on expand

Why does Chrome display two differing datasets depending on if you have the object view expanded?

In contracted view, my object has two properties:

enter image description here

In expanded view, my object has three properties:

enter image description here

  • Possible duplicate of console.log() async or sync?

    – 

The object you see in the console is a snapshot of the object at a particular point in time – the time when you logged it. When you expand the object, it will evaluate the properties again.

In the example below, I have created an object with two array properties. I logged it the console, and then I added a third property, c to it.

Snapshot

Only the first two properties are showing still, even though I just added a third property. After expanding the object in the console, I can see the third one. It is the latest state of the object.

Evaluated

If you hover over the little blue i icon, it explains what it has done:

Value below was evaluated just now.

@Gideon Pyzer is right. the properties were caculated and added after expanding the object in the console.

Just add one line code above your debug code and reopen the chrome dev tool, you will see the differences.

obj = Object.freeze(obj);  //add this line before your console.log
console.log(obj);

Before:

enter image description here

After:

enter image description here

one similar question of mine:
Why can’t I access the attr of the javascript object shown in chrome dev tool

You can clone your object to prevent re-evaluate.

console.log(Object.assign({}, obj));

You can get a real hard copy object by using this module. It will give you the snapshot of the object at moment when you call it.

https://www.npmjs.com/package/nest-object-deep-copy

const nestedHardCopy = require('nest-object-deep-copy');

console.log(nestedHardCopy(obj));

Leave a Comment