object.getownpropertydescriptor 用于获取对象自有属性的完整描述符,返回含 value/writable/enumerable/configurable(数据属性)或 get/set/enumerable/configurable(访问器属性)的对象,属性不存在或为继承属性时返回 undefined。

Object.getOwnPropertyDescriptor 是一个能帮你看清对象属性“内部设置”的工具,特别适合排查属性不可写、不可枚举、意外丢失等问题。
查看属性的完整描述符
它返回一个描述符对象,包含 value、writable、enumerable、configurable 等字段。对普通数据属性和访问器属性(get/set)都有效:
- 普通属性:返回含
value和三个布尔标志的对象 - 访问器属性:返回含
get、set和enumerable、configurable的对象 - 若属性不存在或为继承属性(非自有),返回
undefined
快速判断属性是否可修改或遍历
比如发现 obj.name = 'new' 没生效,可以检查:
如果输出中 writable: false,说明该属性被冻结或用 Object.defineProperty 设为只读;如果 enumerable: false,则 for...in 或 Object.keys() 就看不到它。
区分自有属性和原型链上的属性
这个方法只检查对象自身的属性,不查找原型链。配合 hasOwnProperty 可精准定位问题来源:
-
obj.hasOwnProperty('x')返回true→ 再用getOwnPropertyDescriptor查细节 - 返回
false但属性仍可访问 → 属性在原型上,需去原型对象上调用该方法
调试 Vue/React 响应式属性时的小技巧
框架常把数据属性设为 enumerable: false 或使用访问器,直接 console.log(obj) 看不到真实行为。用它能确认:
- 某个响应式字段是否真有
get函数(而不是普通值) - 计算属性是否被正确设为
configurable: false(防止被意外重定义) - 手动添加的属性是否因未用
Vue.set或reactive()而缺失响应式描述符











