开源地址https://www.duanshuilu.com/【Js中判断对象是否为空对象的几种方法简述】1.空对象、空引用、未定义空对象这三个概念的区别:它是一个对象,但是它的值是一个指向对象的引用,没有任何属性。{}指的是没有任何属性的对象。当然,对象属性包括字面值和函数;空引用:obj=null表示变量值指向一个空变量,null是一个对象。但是空引用(不指向任何对象);变量a=空;控制台日志(空类型);//object注意:当null参与数值运算时,其值会自动转为0console.log(null+123);//123console.log(null*123);//0undefined:未定义,所以不是一个对象,它被定义为“未定义”的特殊类型。当然,当js默认不赋值时,一个变量就是undefined。;vara;console.log(a);//undefinedconsole.log(typeofa);//undefined注意:当undefined参与任何数值计算时,结果必须为NaN。NAN不等于任何数,包括你自己,任何数加上NAN就是NAN;NAN==NANA(false)null和undefined的区别console.log(null==undefined);//true==只需要判断值是否相等//ECMAScript认为undefined是从null派生的,所以定义为相等console.log(null===undefined);//false===需要判断type和value是否都相等console.log(typeofnull==typeofundefined);//false2.判断是否为空对象的几种方法。将Json对象转为json字符串,然后判断该字符串是否为“{}”;变量a={};console.log(JSON.stringify(a)=="{}");//true===insyntaxsimpletraversalvara={};函数isEmptyObj(obj){for(varkey在obj){返回false;}returntrue;}console.log(isEmptyObj(a));//true遍历原型和自身的可枚举属性,需要结合hasOwnProperty去掉原型上的可枚举属性vara={};functionisEmptyObj(obj){for(varkeyinobj){if({}.hasOwnProperty.call(obj,key))返回false;}returntrue;}console.log(isEmptyObj(a));//trueObject.getOwnPropertyNames()方法-----返回不包括原型的所有自身属性(包括不可枚举的属性)vara={};//获取对象中的属性名存入数组,返回一个数组对象,我们可以通过判断数组的长度来判断对象是否为空//注意:该方法不兼容ie8,其他浏览器没测试过console.log(Object.getOwnPropertyNames(a).length===0);//真正使用了ES6的Object.keys()方法,和上面的方法类似,返回值也是一个property的数组对象中的名称vara={};console.log(Object.keys(a).length===0);//真正的返回不包括原型上的可枚举属性,即jquery自带可枚举属性的isEmptyObject方法vara={};//这个方法是jquery封装的(forin),使用需要依赖jqueryconsole.log($.isEmptyObject(a));//真的
