const sym = Symbol('sym')
let obj = {
a: 1,
b: 2,
}
let obj2 = Object.create(obj, {
[sym]: {
value: 3,
enumerable: true
},
c: {
value: 4,
enumerable: false
},
d: {
value: 5,
enumerable: true
}
})
第一种:Object.getOwnPropertyNames() 获取自身对象中所有的属性名,但是不包含Symbol!返回一个数组,不论属性描述符是否是可枚举的
function isEmpty1(obj) {
return Object.getOwnPropertyNames(obj).length === 0;
}
console.log(Object.getOwnPropertyNames(obj2), 'getOwnPropertyNames'); // c、d
第二种:Object.keys() 获取自身对象中所有可枚举的属性名,但是不包含Symbol
function isEmpty2(obj) {
return Object.keys(obj).length === 0;
}
console.log(Object.keys(obj2), 'keys'); // d
第三种:JSON.stringify() 序列化一个对象,返回自身对象中所有可枚举的属性名,但是不包含Symbol
function isEmpty3(obj) {
return JSON.stringify(obj) === '{}';
}
console.log(JSON.stringify(obj2), 'stringify'); // {"d":5}
第四种:in 查找自身对象或对象的原型[prototype]中某一个可枚举的属性名,但是不包含Symbol
function isEmpty4(obj) {
let flag = false
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
flag = true
break
}
}
return flag
}
for (let key in obj2) {
console.log(key, 'in') // d、a、b
}
第五种:Reflect.ownKeys() 获取自身对象中所有的属性名,包含Symbol!不论属性描述符是否是可枚举的!返回一个数组文章来源:https://www.toymoban.com/news/detail-661039.html
function isEmpty5(obj) {
return Reflect.ownKeys(obj).length === 0
}
console.log(Reflect.ownKeys(obj2), 'ownKeys'); // Symbol(sym)、c、d
依综上所述推荐第五种文章来源地址https://www.toymoban.com/news/detail-661039.html
到了这里,关于JS对象判空的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!