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