对象和 console.log 的令人困惑的行为
当使用 console.log() 函数检查对象时,您可能会遇到奇怪的情况结果。例如,如果您记录一个对象数组,然后使用 splice() 修改它,您会发现控制台仍然显示原始数组。
为什么会发生这种情况
Console.log 异步检查对象。尽管控制台同步检索对象的引用,但它会推迟显示其属性,直到您展开它之后(此行为因浏览器而异)。因此,如果在检查之前更改对象,则显示的数据将包含更新的值。
识别差异
Chrome 会提供视觉提示来提醒您注意这一点行为。当您将鼠标悬停在对象上时,一个小“i”会出现在一个框中,并显示以下消息:“记录时,左侧的对象值已被快照,下面的值刚刚被评估。”
解决问题
为了避免这种差异,请考虑记录单个对象属性值:
console.log(obj.foo, obj.bar, obj.baz);
或者,您可以使用 JSON.stringify() 将对象转换为 JSON 字符串:
console.log(JSON.stringify(obj));
另一种方法是通过重新保留对象的可检查性使用 JSON.parse() 对其进行编码:
console.log(JSON.parse(JSON.stringify(obj)));
但是,请注意 JSON 删除了不可序列化的属性,例如作为函数和 DOM 元素。对于复杂的对象,采用强大的深度复制机制来保留这些属性。
以上是为什么修改后 `console.log()` 显示意外的对象值?的详细内容。更多信息请关注PHP中文网其他相关文章!