空对象 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;
}

  

posted @ 2026-04-23 17:38  howhy  阅读(3)  评论(0)    收藏  举报