javascript中reflect没有直接获取对象自有属性数量的方法,需用reflect.ownkeys(obj).length实现,该方法返回包含所有自有字符串键和symbol键的数组长度,涵盖不可枚举属性。

JavaScript 中 Reflect 本身没有直接获取对象自有属性数量的方法。它不提供类似 Object.keys(obj).length 这样的“计数”能力,而是专注于操作行为的封装(如 get、set、ownKeys 等)。要获取自有属性数量,需配合 Reflect.ownKeys() 使用。
用 Reflect.ownKeys() 获取键再计算长度
Reflect.ownKeys(obj) 返回一个包含对象所有自有属性键(包括字符串和 Symbol)的数组,不含继承属性。这是最接近“Reflect 方式”的做法:
- 它能同时捕获字符串键和 Symbol 键,比
Object.keys()更完整 - 返回结果是数组,可直接调用
.length得到数量 - 注意:该方法不区分可枚举性,会包含所有自有属性(无论
enumerable: false还是configurable: false)
示例:
const obj = { a: 1, b: 2 };Object.defineProperty(obj, 'c', { value: 3, enumerable: false });
const sym = Symbol('d');
obj[sym] = 4;
console.log(Reflect.ownKeys(obj).length); // 3('a', 'b', Symbol(d))
// 注意:'c' 虽不可枚举,但仍是自有属性,所以也被计入
与 Object.keys() 的关键区别
如果你只关心可枚举的字符串键,Object.keys() 更简洁;但若需完整自有属性计数(含不可枚举属性和 Symbol),必须用 Reflect.ownKeys():
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
Object.keys()→ 仅返回可枚举的字符串键 -
Object.getOwnPropertyNames()→ 返回所有自有字符串键(含不可枚举),但不含 Symbol -
Reflect.ownKeys()→ 返回所有自有键(字符串 + Symbol),最全
不推荐用 Reflect.enumerate() 或其他方法
Reflect.enumerate() 已被废弃(ECMAScript 2016 起移除),现代环境不可用。也不要尝试用 Reflect.has() 配合遍历——它只能判断单个键是否存在,无法统计总数,效率低且无必要。
封装成工具函数更实用
如果频繁需要自有属性数量,建议封装为一行函数:
const getOwnPropertyCount = obj => Reflect.ownKeys(obj).length;getOwnPropertyCount({ x: 1 }); // 1
getOwnPropertyCount(Object.create({ y: 2 })); // 0(无自有属性)
不复杂但容易忽略:Reflect 是操作反射的工具集,不是属性统计 API。真正干活的还是 ownKeys + .length 这个组合。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










