zoukankan      html  css  js  c++  java
  • 简述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、遇到的问题

    暂无

     

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/wxh0929/p/11770106.html
Copyright © 2011-2022 走看看