zoukankan      html  css  js  c++  java
  • JS中判断空对象

    js 判断空对象

    首先要区分一个概念,空对象和空引用

    空对象:{}是指不含任何属性的对象,当然对象属性包括字面值和函数。
    
    空引用:obj=null 是指变量值指向null变量,当然在js默认不赋值的情况下,一个变量为undefined.
    

    空对象的讨论:

    原型:
        原型上包括了继承属性,有可以枚举的属性和不可以枚举的属性。默认对象都继承了Object。
    自身:
        自身属性同样包括了可枚举的属性和不可枚举的属性。
    

    限定场景:

    后台JSON对象:
    
    判断后台传来的对象为空对象,此时,该对象一般为JSON对象,此时可以忽略原型上的属性判断,因为JSON对象也是一个普通对象,不过它的结构有时候比较特殊,该对象默认基础Objcet,然而,作为一个从后台传来的对象,后台无法实现原型继承、不可枚举这种特性,这个时候,只需要关注对象自身可枚举属性时是否为空即可。
    

    解决方案:

    方案 1:

    var data = {};
    var b = JSON.stringify(data) == "{}";
    alert(b); //true
    

    方案 2:

    Object.keys(obj)返回不包括原型上的可枚举属性,即自身的可枚举属性
    
    var data = {};
    var b = Object.keys(data).length === 0;
    

    方案 2 模拟实现:

    for in语法遍历原型及自身上的可枚举属性,需要结合hasOwnProperty去除原型上的可枚举属性
    
    var data = {};
    function isEmptyObj(obj) {
        for (var key in obj) {
            if ({}.hasOwnProperty.call(obj, key)) return false;
        }
        return true;
    }
    var b=isEmptyObj(data);
    console.log(b);
    

    方案 3:

    Objcet.getOwnPropertyNames(obj)返回不包括原型上的所有自身属性(包括不可枚举的属性)
    
    var data = {};
    var b=Object.getOwnPropertyNames(data)===0;
    console.log(b);
    
  • 相关阅读:
    7、NFC技术:让Android自动运行程序
    6、Android中的NFC技术
    5、NFC概述
    Delphi XE7中开发安卓程序一些有用的帮助资源
    Delphi开发安卓程序的感受
    Tomcat绿色版启动"startup.bat"一闪问题的解决方法!
    Delphi判断字符串中是否包含汉字,并返回汉字位置
    Delphi的DLL里如何实现定时器功能?
    Delphi的DLL里如何实现定时器功能?
    VS2013如何添加LIb库及头文件的步骤
  • 原文地址:https://www.cnblogs.com/sefaultment/p/9444345.html
Copyright © 2011-2022 走看看