object.getownpropertydescriptor用于获取对象自有属性的完整描述符,不查找原型链;返回值依属性类型而异:数据属性含value/writable,访问器属性含get/set;支持对基本类型自动装箱,但传入null/undefined会抛typeerror。

Object.getOwnPropertyDescriptor 用来查一个对象“自己身上”的某个属性的完整配置信息,不看原型链,也不管属性是否可枚举——只要它是对象直接拥有的,就能拿到它的描述符;查不到就返回 undefined。
查的是“自有属性”,不是继承来的
它只关心对象自身定义的属性,哪怕原型上有同名属性,也完全忽略。比如:
-
{}没有toString这个自有属性,所以Object.getOwnPropertyDescriptor({}, 'toString')返回undefined(尽管能调用) -
const obj = Object.create({ a: 1 }); obj.b = 2;→ 只能查到b的描述符,a查不到
返回值结构取决于属性类型
数据属性(普通赋值)和访问器属性(含 get/set)返回的字段不同,不能混用:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 数据属性(如
obj.x = 1)→ 返回含value和writable的对象 - 访问器属性(如用
defineProperty设置了get)→ 返回含get和/或set,不含value/writable - 所有描述符都可能含
enumerable(能否被for...in遍历)和configurable(能否删、能否改其他特性)
常配合 defineProperty 做属性控制
获取描述符后,常用来做精准修改或复用配置:
- 冻结某个属性:先查描述符,再把
configurable: false, writable: false传给defineProperty - 复制属性特性:比如深克隆时保留
enumerable或configurable状态 - 实现只读逻辑:设
writable: false,再加set()抛错,让赋值失败时明确报错
注意边界情况
它对非对象参数会自动装箱,比如字符串、数字:
-
Object.getOwnPropertyDescriptor('abc', 0)返回第 0 个字符的描述符(value: 'a',且writable: false) - 属性名会被转成字符串,所以
Object.getOwnPropertyDescriptor(obj, 123)实际查的是'123' - 传
null或undefined直接报错(TypeError),不是返回undefined
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










