对象属性的循环与遍历

340 阅读1分钟

对象属性遍历的方法

  • for...in
  • Object.keys/Object.values/Object.entries
  • Object.getOwmPropertyName
遍历方法自身属性继承属性可枚举性Symbol类型
for...in自身继承可枚举不包含
Object.keys()自身可枚举不包含
Object.getOwnPropertyNames()自身可枚举和不可枚举不包含
Object.getOwnPropertySymbols()自身可枚举和不可枚举所有Symbol属性
Reflect.ownKeys()自身可枚举和不可枚举包含

其中只有for...in是能够访问到原型上的属性,除了Reflect.Ownkeys()和Object.getOwnpropertySymbols之外都不能访问到Symbol属性 只要带'Own'的都是忽略不可枚举的,也就是说不可枚举的属性可以访问到

如何判断一个对象是不是一个空对象

function ObjisEmpty(obj) {
    return obj !== null
    && typeof obj === 'object'
    && !Array.isArray(obj)
    && (Object.getOwnPropertyNames(obj).length === 0)
    && (Object.getOwnPropertySymbols(obj).length === 0)
}
// or
function ObjisEmpty(obj) {
    return (Object.prototype.toString.call(obj) === '[object Object]')
    && (Object.getOwnPropertyNames(obj).length === 0)
    && (Object.getOwnPropertySymbols(obj).length === 0)
}

// or
function ObjisEmpty(obj) {
    return (String(obj) === '[object Object]') && (Reflect.ownKeys(obj).length === 0)
}