reflect静态方法完整暴露对象自有结构,统一处理字符串键、symbol键及不可枚举属性:ownkeys返回全部自有键,get/set支持symbol与receiver绑定,getownpropertydescriptor等方法均不忽略特殊键,has/deleteproperty对symbol键与字符串键行为一致。

Reflect 静态方法对特殊属性键(如 Symbol 键、不可枚举属性、内部键)的处理,核心在于“完整暴露”和“统一语义”——它不筛选、不过滤、不隐式跳过,而是按语言规范原样呈现对象的自有结构。
Reflect.ownKeys() 完整返回所有自有键
这是最典型的体现。它把 字符串键 + Symbol 键 + 所有可枚举/不可枚举属性 一次性全量返回,不依赖属性描述符的 enumerable 设置:
-
Object.keys()只返回可枚举的字符串键 -
Object.getOwnPropertyNames()返回所有字符串键(含不可枚举),但漏掉 Symbol -
Object.getOwnPropertySymbols()只返回 Symbol 键 -
Reflect.ownKeys(obj)等价于两者的并集,还可能包含某些引擎内部键(如@@toStringTag)
Reflect.get() / Reflect.set() 支持 Symbol 和 receiver 绑定
当属性名是 Symbol 时,Reflect.get(obj, sym) 和 Reflect.set(obj, sym, value) 完全可用,无需额外转换:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 直接传入 Symbol 实例作为
name参数即可 -
receiver参数允许你显式控制 getter 中的this指向,这对继承链中 Symbol 属性的访问很关键 - 相比
obj[sym],Reflect.get()能更可靠地触发 getter 并绑定正确上下文
Reflect.getOwnPropertyDescriptor() 不忽略不可枚举或 Symbol 属性
它能获取任意自有属性的完整描述对象,无论该属性是否可枚举、是否为 Symbol:
- 对不可枚举字符串属性,返回含
enumerable: false的描述符 - 对 Symbol 属性,返回含
value或get/set的描述符,且key就是原始 Symbol - 这比
Object.getOwnPropertyDescriptor()行为一致,但 Reflect 版本更强调“可预测返回”,失败时返回undefined而非抛错
Reflect.has() 和 Reflect.deleteProperty() 同样兼容 Symbol 键
这两个方法对 Symbol 键的处理与字符串键完全对等:
-
Reflect.has(obj, sym)等效于sym in obj,但只查自身,不查原型链 -
Reflect.deleteProperty(obj, sym)等效于delete obj[sym],返回布尔值表示是否删除成功(而非静默忽略) - 它们不区分键类型,只要键存在于目标对象自有属性中,就参与运算










