JavaScript(JS) 中对象没有属性初始化时,可能使用{}进行初始化,如此我们判断这样的没有属性的空对象就不是很方便,本文主要介绍JavaScript(JS) 中判断没有属性的空对象{}的五种方法,以及相关的示例代码。

1、通过JSON.stringify()判断

可以使用JSON.stringify()将Javascript对象转换为JSON字符串。通过字符串判断对象是否为空。但需要注意有属性是不可枚举或继承的问题。

const obj1 = {}
const obj2 = new Object()

console.log(JSON.stringify(obj1) === '{}')  // true
console.log(JSON.stringify(obj2) === '{}')  // true
// 在原型上添加一个可枚举属性
Object.prototype.name = 'cjavapy'
​
console.log(JSON.stringify(obj) === '{}')  // true
​
const obj = {}
// 在obj对象上添加一个不可枚举属性
Object.defineProperty(obj, 'class', {
    value: 18,
    enumerable: false
})
console.log(JSON.stringify(obj) === '{}')  // true

2、通过for…in判断

可以使用for...in循环遍历对象所有可枚举属性(除Symbol以外),当对象有属性存在返回false, 否则返回true。

1)不考虑继承

const obj = {}
​
function isObjectEmpty(obj){
    for(var key in obj){
        return false
    }
    return true
}
console.log(isObjectEmpty(obj)) // true

2)继承属性

const obj = {}
Object.prototype.name = 'cjavapy'

function isObjectEmpty (obj) {
    for (let key in obj) {
        if(obj.hasOwnProperty(key)) return false
    }
    return true
}

function isObjectEmpty1 (obj) {
    for (let key in obj) {
        return false
    }
    return true
}
console.log(isObjectEmpty(obj)) // true
console.log(isObjectEmpty1(obj)) // false

3、通过Object.getOwnPropertyNames()判断

Object.getOwnPropertyNames() 方法会返回该对象所有可枚举和不可枚举属性的属性名(不含Symbol属性)组成的数组。然后通数组的长度判断就可以,如下,

const obj = {}
Object.prototype.name = 'cjavapy'

console.log(Object.getOwnPropertyNames(obj).length === 0)  // true
//不可枚举的属性也能判断
Object.defineProperty(obj, 'class', {
    value: 18,
    enumerable: false
})
console.log(Object.getOwnPropertyNames(obj).length === 0)  // false

4、通过Object.keys()判断

Object.keys() 是 ES5 新增的一个对象方法,该方法返回一个对象自有的可枚举属性(不含继承的和Symbol属性)数组,通过判断数组长度判断。如下,

const obj = {}
console.log(Object.keys(obj).length === 0)  //true
​
Object.prototype.name = 'cjavapy'
Object.defineProperty(obj, 'class', {
    value: 18,
    enumerable: false
})
​
console.log(Object.keys(obj).length === 0)  //true

推荐文档