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、遇到的问题

    暂无

     

  • 相关阅读:
    vue中封装公共方法,全局使用
    element-ui table 最后一行合计,单元格合并
    vuex 进行封装
    vue生命周期
    (转)no terminal library found
    解压
    (转)bash: make: command not found
    (转)linux 批量删除文件命令
    python
    Session
  • 原文地址:https://www.cnblogs.com/wxh0929/p/11770106.html
Copyright © 2011-2022 走看看