前端判断对象是否为空的几种方法

1.使用JSON把对象转换成字符串

let obj1 = {};
let obj2 = {a: 'a', b: 12, c: [1,2,3]};
function isEmptyObject(obj) {
    let objStr = JSON.stringify(obj);
    if(objStr == '{}') {
        return true;
    } else {
        return false;
    }
}
isEmptyObject(obj1); // true
isEmptyObject(obj2); // false

2.使用Object.getOwnPropertyNames,返回一个数组,数组会获取到此对象 所有可枚举和不可枚举 的属性名称

let obj1 = {};
let obj2 = {a: 'a', b: 12, c: [1,2,3]};
function isEmptyObject(obj) {
    let keys = Object.getOwnPropertyNames(obj);
    if(keys.length == 0) {
        return true;
    } else {
        return false;
    }
}
isEmptyObject(obj1); // true
isEmptyObject(obj2); // false

3.使用Object.keys,同样返回一个数组,数组会获取到此对象 所有可枚举 的属性名称

let obj1 = {};
let obj2 = {a: 'a', b: 12, c: [1,2,3]};
function isEmptyObject(obj) {
    let keys = Object.keys(obj);
    if(keys.length == 0) {
        return true;
    } else {
        return false;
    }
}
isEmptyObject(obj1); // true
isEmptyObject(obj2); // false

4.使用jQuery的方法(需要引用jQuery)

let obj1 = {};
let obj2 = {a: 'a', b: 12, c: [1,2,3]};
$.isEmptyObject(obj1); // true
$.isEmptyObject(obj2); // false

此处再贴上jQuery的判断空对象的源码,很简单的一段,和第5种一样

isEmptyObject: function( obj ) {
	var name;

	for ( name in obj ) {
		return false;
	}
	return true;
}
// 不过不太明白大佬为什么要把 name 放在外面声明,是否有什么玄机

5.使用for循环,如果可以遍历证明非空,反之,则是空对象

let obj1 = {};
let obj2 = {a: 'a', b: 12, c: [1,2,3]};
function isEmptyObject(obj) {
    for(let key in obj) {
        return false;
    }
    return true;
}
isEmptyObject(obj1); // true
isEmptyObject(obj2); // false

 

你可能感兴趣的:(JavaScript,js)