持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
前言
开发过程中,难免有时候我们会要来判断,一个对象他到底是不是为空对象,那么我们有什么方法可以来判断呢,以下我将用几种方法来叙述下,可能实际过程中,我们只用到其中1两种,但是其他的方法我们了解多几种,也是没有问题的。
不考虑symbol数据类型
1、JSON.stringify 判空
主要就是把对象转为字符串,这个方法也有要注意的地方,如果里面的属性返回的undefined
let obj = {}
console.log(JSON.stringify == '{}')
undefined情况如下:
let obj = {a:undefined}
console.log(JSON.stringify == '{}')
//这个时候他也是等于空对象,所以这也是注意的问题
2、for in判空
使用for in触发循环返回false,没有触发就返回true
let isObjNull = (items) =>{
for(let item in items){
return false
}
return true
}
3、Object.getOwnPropertyNames 判空
这个getOwnPropertyNames 该方法遍历对象自身所有的的属性
let obj = {}
let arr = Object.getOwnPropertyNames(obj)
console.log(arr.length == 0)
4、Object.keys判空
遍历自身可枚举的属性
可枚举或者不可枚举属性是对象内部通过可枚举标志
enumerable
来进行区分的,在默认情况下,我们obj.name = "cxy"
为对象新增了一个属性后,其可枚举标志enumerable
为ture
,而当其值为false
的时候它是不可枚举的,当我们对对象进行for
,Object.keys()
,JSON.stringify()
的时候不可枚举属性是找不出来的,我们可以理解为不可枚举属性是隐身的
let obj = {}
let arr = Object.keys(obj)
console.log(arr.length == 0)
5、hasOwnProperty 判空
这个的主要逻辑就是要先遍历,每个都调一下这个hasOwnProperty来判断该对象是不是有某种数据,如果没有就返回false
let isObjNull = (items) =>{
for(let item in items){
if(items.hasOwnProperty(item)){
return false
}
}
return true
}
6、Reflect.ownKeys()
该方法可以判断对象自身的所有属性,包含 Symbol 属性
function objIsEmpty(obj){
return Reflect.ownKeys(obj).length === 0
}