简述Js中,判断对象为空对象的几种方式

1、空对象、空引用以及undefined三种概念的区别

  • 空对象:是对象,但它的值是指向没有任何属性的对象的引用, {}是指 不含任何属性 的对象,当然对象属性包括 字面值和函数
  • 空引用:obj=null 是指  变量值指向null变量  ,null是对象,但是空引用(不指向任何对象);
    var a = null;
    console.log(typeof null); //object  
    
    注意:null 参与数值运算时其值会自动转换为 0
    console.log(null + 123);//123
    console.log(null * 123);//0
  • undefined:未定义,所以不是对象,本身被定义为“undefined”这一特殊类型,当然在js默认不赋值的情况下,一个变量为undefined.;
    var a;
    console.log(a); //undefined
    console.log(typeof a); //undefined
    
    注意:undefined参与任何数值计算时,其结果一定是NaN。NAN不等于任何数,包括自己,任何数加NAN都是NAN; NAN == NANA(false)
  • null 与 undefined的区别
     console.log(null == undefined);//true  ==只需要判断值是否相等
    //ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的
     console.log(null === undefined);//false   ===需要判断类型与值是否全部相等
     console.log(typeof null == typeof undefined);//false

2、判断是否为空对象的几种方式

  • .将Json对象转化为json字符串,再判断该字符串是否为"{}";
    var a = {};
    console.log(JSON.stringify(a) == "{}");//true    ===同样为true
  • for in语法
    • 简单遍历
      var a = {};
      function isEmptyObj(obj) {
        for (var key in obj) {
          return false;
        }
        return true;
      }
      console.log(isEmptyObj(a));//true
    • 遍历原型及自身上的可枚举属性,需要结合hasOwnProperty去除原型上的可枚举属性
      var a = {};
      function isEmptyObj(obj) {
        for (var key in obj) {
          if ({}.hasOwnProperty.call(obj, key)) return false;
        }
        return true;
      }
      console.log(isEmptyObj(a));//true
  • Object.getOwnPropertyNames()方法 ----- 返回不包括原型上的所有自身属性(包括不可枚举的属性)
    var a = {};
    //获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空
    //注意:此方法不兼容ie8,其余浏览器没有测试
    console.log(Object.getOwnPropertyNames(a).length === 0);//true
  • 使用ES6的Object.keys()方法,与上述方法类似,返回值也是对象中属性名组成的数组
    var a = {};
    console.log(Object.keys(a).length === 0);//true   返回不包括原型上的可枚举属性,即自身的可枚举属性
  • jquery的isEmptyObject方法
    var a = {};
    //此方法是jquery将(for in)进行封装,使用时需要依赖jquery
    console.log($.isEmptyObject(a)); //true

3、遇到的问题

暂无

 

原文地址:https://www.cnblogs.com/wxh0929/p/11770106.html