object.getownpropertysymbols() 返回对象自身所有symbol属性键的数组,不包括字符串键和继承属性;例如返回[symbol(a), symbol(b)];区别于object.keys()和object.getownpropertynames(),它只获取symbol键且无论是否可枚举。

Object.getOwnPropertySymbols() 是 JavaScript 中用于获取对象自身所有 Symbol 类型属性名 的静态方法。它只返回对象**直接拥有**(非继承)的 Symbol 键,不包括字符串键,也不包括原型链上的 Symbol 属性。
作用和返回值
该方法接收一个对象作为参数,返回一个数组,数组元素是该对象自身定义的所有 Symbol 类型的属性键(即 Symbol 值),顺序与属性被添加到对象中的顺序一致。
例如:
const sym2 = Symbol('b');
const obj = { [sym1]: 'value1', str: 'hello', [sym2]: 'value2' };
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a), Symbol(b)]
与 Object.keys() 和 Object.getOwnPropertyNames() 的区别
- Object.keys():只返回对象自身的 可枚举字符串键
- Object.getOwnPropertyNames():返回对象自身的 所有字符串键(包括不可枚举的,如 Object.defineProperty 设置的 enumerable: false)
- Object.getOwnPropertySymbols():只返回对象自身的 所有 Symbol 键(无论是否可枚举)
配合 Reflect.ownKeys() 获取全部自有键
若想一次性拿到对象所有的自有属性键(含字符串 + Symbol),推荐使用 Reflect.ownKeys():
console.log(Reflect.ownKeys(obj)); // ['str', Symbol(a), Symbol(b)]它等价于:
[...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)]
常见使用场景
- 遍历并操作 Symbol 属性(如调试、序列化时忽略/保留 Symbol 字段)
- 实现私有状态封装(利用 Symbol 不易被外部枚举的特性)
- 框架或库中做元数据反射(如 Angular、Vue 的响应式标记常使用 Symbol 作为内部标识)
- 检测对象是否含有特定 Symbol 属性(结合 includes 或 find)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











