[JavaScript] - 判断空对象

112 阅读1分钟

如何判断一个空对象?

方法一

将对象序列化,判断序列化后的字符串。

const obj = {}
let stringfiedObj = JSON.stringify(obj)
console.log(stringfiedObj === '{}') // true

方法二

使用 for...in。

注:for...in 也会输出原型链上继承的可枚举属性,所以需要额外判断是否是原型链的属性。

function objectIsEmpty(obj) {
  for (let value in obj) {
    if (obj.hasOwnProperty(value)) {
			return false
    }
  }
  return true
}

// 创建一个对象,在对象的原型上挂载一个 sex 属性
class Person {
}
Person.prototype.sex = 'unknow'

let p1 = new Person()
console.log(objectIsEmpty(p1)); // 输出仍为 true

附上 MDN 中对 for...in 的介绍:

for...in 语句以任意顺序迭代一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。

方法三

使用 Object.keys()

注:Object.keys() 返回对象自身的可枚举属性组成的数组(不包括不可枚举属性)

function objectIsEmpty(obj) {
  let keys = Object.keys(obj)
  if (keys.length === 0) {
		return true
  } else {
    return false
  }
}

objectIsEmpty({}) // true
objectIsEmpty({ name: 'xiaowang' }) // false

方法四

如果想同时将不可枚举属性也纳入判断范围,可以使用 Object.getOwnPropertyNames

function objectIsEmpty(obj) {
  let keys = Object.getOwnPropertyNames(obj)
  if (keys.length === 0) {
		return true
  } else {
    return false
  }
}

objectIsEmpty({}) // true
objectIsEmpty({ name: 'xiaowang' }) // false

如果还有其他方法,欢迎小伙伴们提出,共同学习。