对象属性遍历的方法
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)
}