如何使用开发人员工具打印具有嵌套属性的javascript对象,而不让嵌套属性指向错误的引用

如何使用开发人员工具打印具有嵌套属性的javascript对象,而不让嵌套属性指向错误的引用,javascript,console,Javascript,Console,例如: var o = { a: 12, gg: { mm: { a: 15 } } } console.log(o, _.copy(o)) o.gg.mm.a = 44 在这种情况下,在开发工具中,它将打印两次“o”,并且o.gg.mm.a的值将不同 在第一个示例中,值为44 在第二个函数中,值是15——这要归功于jquery复制函数或下划线克隆函数 打印更复杂的主干模型时,它会不断打印指向错误参考的对象,即44而不是15(无论是否使用克隆/复制) 有几个选项

例如:

var o = {
a: 12,
gg: {
    mm: {
        a: 15
    }
}
}
console.log(o, _.copy(o))
o.gg.mm.a = 44
在这种情况下,在开发工具中,它将打印两次“o”,并且o.gg.mm.a的值将不同

在第一个示例中,值为44

在第二个函数中,值是15——这要归功于jquery复制函数或下划线克隆函数

打印更复杂的主干模型时,它会不断打印指向错误参考的对象,即44而不是15(无论是否使用克隆/复制)

有几个选项可以显示这些属性(即使使用主干模型),但它们都很糟糕:

  • 使用具有已知限制(即克隆/复制/扩展)的包装器来处理嵌套属性
  • 复制/克隆/扩展特定属性,以访问嵌套对象,如console.log(u.copy(o.gg.mm))
  • 直接在值上使用console.log,即console.log(o.gg.mm.a),以获得正确的值
  • 启动调试器并检查值

有更简单的吗?我想在没有console.log误导我的情况下查看对象及其属性

不幸的是,控制台被延迟评估–也就是说,只有在单击查看对象后才能获取对象属性的值

如果您使用Chrome,您可能需要考虑设置一个断点,该断点将阻止代码执行,这样您就可以在修改对象之前查看该对象。


有关断点的更多信息,请参见此处:

如果对象中没有太多内容,也不需要它处于活动状态,则可以始终序列化为字符串(通过JSON或使用toString循环并递归自身属性的函数)