判断对象是否为空
后面介绍的几种方法都将基于下面所列举出来的几种数据进行介绍,主要还是使用对象的几种方法,这篇文章 juejin.cn/post/689983… 列举了对象和数组遍历的几种方法
const obj1 = {}
const obj2 = {
name:'zs',
age:12,
[Symbol('address')]: '北京朝阳区'
}
const obj3 = Object.create(null)
const obj4 = Object.defineProperty({},'sex',{
value:'男',
enumerable: false
})
const obj5 = {
[Symbol('desc')]: '前端代码仔'
}
【 方法1 】JSON.stringify() 将 js 对象转化为 JSON 字符串,然后在与 '{}' 进行比较
/**
*
* @desc 判断对象是否为空
* @param 需要判断的对象 obj
* @return Boolean 返回一个布尔值
*/
function objIsEmpty(obj){
return JSON.stringify(obj) === '{}'
}
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // true
console.log(objIsEmpty(obj5)) // true
注意!!!:JSON.stringify 仅会序列化可枚举的属性,不可枚举的属性默认会被忽略
const obj4 = Object.defineProperty({},'sex',{
value:'男',
enumerable: false
})
console.log(JSON.stringify(obj4)) // {}
【 方法2 】使用 for...in 对对象进行遍历,(该方法返回对象自身和继承的可枚举属性)
if(obj.length0){
return false
}
for(let key in obj) {
if (hasOwnProperty.call(obj,key)) {
return false;
}
}
return true
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // true
console.log(objIsEmpty(obj5)) // true
【 方法3 】使用对象的 Object.keys() 方法 (该方法遍历对象自身可枚举的属性,不包含 Symbol 属性)
function objIsEmpty(obj){
return Object.keys(obj).length === 0
}
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // true
console.log(objIsEmpty(obj5)) // true
拓展: 遍历对象的 Symbol 属性,可以使用 Object.getOwnPropertySymbols()获取
function objIsEmpty(obj){
return Object.keys(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0
}
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // true
console.log(objIsEmpty(obj5)) // false
【 方法4 】使用对象的 Object.getOwnPropertyNames()(该方法遍历对象自身所有的的属性,不包含 Symbol 属性)
function objIsEmpty(obj){
return Object.getOwnPropertyNames(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0
}
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // false
console.log(objIsEmpty(obj5)) // false
【 方法5 】使用 Reflect.ownKeys()(该方法对象自身的所有属性,包含 Symbol 属性)
function objIsEmpty(obj){
return Reflect.ownKeys(obj).length === 0
}
console.log(objIsEmpty(obj1)) // true
console.log(objIsEmpty(obj2)) // false
console.log(objIsEmpty(obj3)) // true
console.log(objIsEmpty(obj4)) // false
console.log(objIsEmpty(obj5)) // false