js 判断空对象的方法

JSON.stringify() == “{}”

空对象对应的字符串为”{}”,

使用 JSON.stringify() 方法把对象转化成字符串.

var obj = {};
var obj2 = new Object()

function isEmptyObject(obj){
    if (JSON.stringify(obj) == "{}") {
    	return true
    }
    return false;
}
	
console.log(isEmptyObject(obj))  // true
console.log(isEmptyObject(obj2))  // true

ES6 的 Object.keys()

Object.keys() 返回对象中属性名(可枚举)组成的数组。

var obj = {};

function isEmptyObject(obj){
	var arr = Object.keys(obj);
    if (arr.length == 0) {
    	return true
    }
    return false;
}
	
console.log(isEmptyObject(obj));  //true

Object.getOwnPropertyNames()

getOwnPropertyNames() 返回一个数组,其包含给定对象中所有自有属性(包括可枚举和不可枚举属性,但不包括使用 symbol 值作为名称的属性)

var obj = {};

function isEmptyObject(obj){
	var arr = Object.getOwnPropertyNames(obj);
    if (arr.length == 0) {
    	return true
    }
    return false;
}
	
console.log(isEmptyObject(obj));  //true

Object.getOwnPropertyNames()

for…in 循环

使用 for…in 循环可以遍历所有属性以此判断对象是否为空对象:

var obj = {};

function isEmptyObject(obj){
	for(var key in obj) {
		return false
	}
    return true;
}
	
console.log(isEmptyObject(obj))  // true

Object.keys() 和 for…in 的区别

Object.keys() 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)。
for…in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

Object.keys() 和 Object.getOwnPropertyNames() 的区别

Object.keys() 返回对象中属性名(可枚举)组成的数组。
getOwnPropertyNames() 返回一个数组,其包含给定对象中所有自有属性(包括可枚举和不可枚举属性,但不包括使用 symbol 值作为名称的属性)