JavaScript -- 浅谈判断空对象

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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"为对象新增了一个属性后,其可枚举标志enumerableture,而当其值为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 
 }