浏览器 console.log 注意点
问题:浏览器打印对象的展开值与未展开值不一致
我:在浏览器调试面板中打印一个对象,展开这个对象的时候,浏览器做了什么操作
AI: 在浏览器调试面板中打印一个对象时,浏览器通常会将其转换为字符串形式,以便于查看和理解其内部结构。具体操作可能因浏览器而异,但通常情况下,浏览器会遍历对象的属性,并将它们的值以字符串形式拼接起来,形成一个类似于 JSON 格式的字符串。
当您展开一个对象时,浏览器的展开操作实际上是对对象的遍历和序列化。在这个过程中,浏览器会将对象的属性名称和值都转换成字符串形式,并按照一定的格式进行排列和展示。
在解决这个问题前,先了解以下 js 内存机制
先创建一个a对象
保留第一个a未展开,展开第二个a,可以看到展开值与未展开时是一致的,此时如果对a所引用的值进行操作,那么展开值也会发生改变
如下,对a.n进行更改
此时展开第一个a,发现展开值发生了变化,因此,
我认为在浏览器第一次展开对象时,会获取对象的引用值进行展示,而在展示后,再对a的属性进行修改操作不会再影响展开值