为何部分JSON属性仅在展开视图显示?如何访问这类属性?
为什么部分JSON属性仅在展开视图显示?
常见原因
- 控制台的默认优化:浏览器或调试工具的控制台为了避免折叠视图信息过载,默认只展示对象的自有可枚举属性。那些继承自原型链的属性、不可枚举属性,或者被判定为“非核心”的内置方法,会被隐藏到展开视图中。
- 属性特性限制:
- 不可枚举属性:通过
Object.defineProperty定义时设置了enumerable: false的属性,默认不会在折叠视图显示,必须展开才能看到。 - 原型链属性:对象从原型继承来的属性(比如数组的
map、filter方法),控制台默认不会在折叠视图展示,展开后会出现在__proto__或原型链区域。
- 不可枚举属性:通过
- 大型对象的懒加载:如果对象体积较大,控制台会先渲染核心属性,展开时才遍历所有属性,提升界面渲染速度。
如何访问展开视图中的属性?
完全可以访问,常用方法如下:
- 直接通过属性名调用:只要知道属性名称,不管它在不在折叠视图显示,都可以用
obj.propertyName或obj['propertyName']直接获取。比如原型链上的toString方法,直接用obj.toString()就能调用。 - 遍历所有属性:
Object.getOwnPropertyNames(obj):获取对象的所有自有属性(包含不可枚举属性)。Reflect.ownKeys(obj):获取对象的所有自有属性(包含Symbol类型的属性)。for...in循环:可以遍历对象自身及原型链上的可枚举属性,配合obj.hasOwnProperty(key)可筛选出自有属性。
- 调整控制台设置:部分浏览器控制台(如Chrome)可以在设置里勾选“Show all properties”,让折叠视图也展示更多属性类型。
内容的提问来源于stack exchange,提问作者Brandon Bell
相关产品推荐
相关产品推荐

