空对象 Object.keys for ...in Reflect.ownKeys ...区别
| 方法 | 返回的属性范围 | 是否包含不可枚举属性 | 是否包含 Symbol 属性 | 是否包含原型链属性 |
|---|---|---|---|---|
Object.keys(obj) |
自身属性 | ❌ 只包含可枚举 | ❌ 不包含 Symbol | ❌ 不包含 |
Object.getOwnPropertyNames(obj) |
自身属性 | ✅ 包含不可枚举 | ❌ 不包含 Symbol | ❌ 不包含 |
Object.getOwnPropertySymbols(obj) |
自身 Symbol 属性 | -(Symbol 无枚举概念) | ✅ 是 | ❌ 不包含 |
Reflect.ownKeys(obj) |
自身属性 | ✅ 包含不可枚举 | ✅ 包含 Symbol | ❌ 不包含 |
for...in 循环 |
可枚举属性 | ❌ 只枚举可枚举 | ❌ 不枚举 Symbol | ✅ 包含原型链上的可枚举属性 |
Object.values(obj) / Object.entries(obj) |
同 Object.keys |
❌ 只包含可枚举 | ❌ | ❌ |
function isEmptyObject(obj) {
return obj!=null && typeof obj === 'object' && !Array.isArray(obj) && Object.keys(obj).length === 0;
}

浙公网安备 33010602011771号