object.getownpropertynames用于获取对象自身所有可枚举和不可枚举的字符串属性名(不含symbol),返回按定义顺序排列的字符串数组;它不查找原型链,但包含object.defineproperty设置的不可枚举属性。

Object.getOwnPropertyNames 用于获取对象自身所有可枚举和不可枚举的字符串属性名(不包括 Symbol 属性),返回一个字符串数组。
获取对象自身的全部属性名(含不可枚举)
它只遍历对象**自身**的属性,不会沿原型链查找;与 Object.keys() 不同,它包含不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的属性)。
- 基础用法:
Object.getOwnPropertyNames(obj) - 返回值是数组,元素为字符串类型的属性名,顺序按属性定义或添加顺序(ES2015+ 规范保证)
- 不返回 Symbol 类型属性(要用
Object.getOwnPropertySymbols)
区分可枚举与不可枚举属性
比如手动定义一个不可枚举属性:
const obj = { a: 1, b: 2 };
Object.defineProperty(obj, 'hidden', {
value: 'secret',
enumerable: false
});
console.log(Object.getOwnPropertyNames(obj)); // ['a', 'b', 'hidden']
console.log(Object.keys(obj)); // ['a', 'b']
可以看到 hidden 不在 Object.keys 结果中,但会被 getOwnPropertyNames 捕获。
配合 Object.getOwnPropertyDescriptor 查看属性细节
拿到属性名后,可进一步检查每个属性的配置:
-
Object.getOwnPropertyDescriptor(obj, prop)返回该属性的描述符对象 - 能查到
value、writable、enumerable、configurable等信息 - 对函数、数组等内置对象也适用(如
Object.getOwnPropertyNames(Array.prototype))
注意:不处理原型链和 Symbol 属性
如果需要完整属性视图:
- 要包含原型链上的属性 → 用
for...in或递归遍历Object.getPrototypeOf - 要包含 Symbol 属性 → 单独调用
Object.getOwnPropertySymbols(obj),再合并结果 - 要同时获取字符串 + Symbol 属性 → 可组合使用两者:
[...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)]
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











