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

  • 空对象:是对象,但它的值是指向没有任何属性的对象的引用, {}是指 不含任何属性 的对象,当然对象属性包括 字面值和函数
  • 空引用:obj=null 是指  变量值指向null变量  ,null是对象,但是空引用(不指向任何对象);
    var a = null;
    console.log(typeof null); //object 注意:null 参与数值运算时其值会自动转换为
    console.log(null + );//
    console.log(null * );//
  • 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 === );//true
  • 使用ES6的Object.keys()方法,与上述方法类似,返回值也是对象中属性名组成的数组
    var a = {};
    console.log(Object.keys(a).length === );//true 返回不包括原型上的可枚举属性,即自身的可枚举属性
  • jquery的isEmptyObject方法
    var a = {};
    //此方法是jquery将(for in)进行封装,使用时需要依赖jquery
    console.log($.isEmptyObject(a)); //true

3、遇到的问题

暂无

简述Js中,判断对象为空对象的几种方式的更多相关文章

  1. js中构造函数的原型添加成员的两种方式

    首先,js中给原型对象添加属性和方法. 方式一:对象的动态特效 给原型对象添加成员 语法:构造函数.prototype.方法名=function (){ } 方式二:替换原型对象(不是覆盖,而是替换, ...

  2. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  3. js中的函数,Date对象,Math对象和数组对象

    函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...

  4. (转)Java 中关于String的空对象(null) ,空值(empty),空格

    原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...

  5. JS中判断鼠标按键的问题

    JS中判断鼠标按键的问题.IE左键是 window.event.button = 1右键是 window.event.button = 2中键是 window.event.button = 4没有按键 ...

  6. Js中判断变量存不存在的问题

    前面写过jquery对象存在与否的判断.现在谈下Js中判断变量存不存在的问题. 如果这样if(!a),当变量a在js中没有申明时,就会报错,那么接下去的代码将不会被执行.注意,这种判断只要变量申明过, ...

  7. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

  8. 简述JS中 appy 和 call 的详细用法

    Apply 和 Call 两个老生常言的方法,使用过程的一些细节还是有很大的异同,具体使用情况可以参照下面例子详细回顾一下. 区别和详解:js中call()和apply()的用法 1.关于call() ...

  9. jq、js中判断checkbox是否选中

    最近在开发项目时用到checkbox复选框,其中遇到一个问题:在JQ中如何判断checkbox是否被选中呢?之前用JQ获取元素的属性用的都是attr(),但用在checkbox上却没有用,原因何在?? ...

随机推荐

  1. webbrowser 修改浏览器版本的方法

    http://blog.csdn.net/herogui/article/details/51982474

  2. ASP.NET大文件上传断点续传解决方案

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

  3. windows下kafka配置入门 示例

    实验平台与软件: 操作系统:windows7 32  位 java 开发包: jdk1.8.0_144 集群: zookeeper-3.3.6 消息队列: kafka_2.11-0.11.0.1 安装 ...

  4. LibreOJ NOI Round #2 Day 1

    LibreOJ NOI Round #2 Day 1 T1: 别被定义弄晕了 反着做,A->1/A+B 取倒数没法做,所以变成a/b,维护2*2的矩阵 区间?不用线段树,不用倍增 存在逆矩阵,直 ...

  5. [CSP-S模拟测试]:组合(欧拉路)

    题目传送门(内部题119) 输入格式 第一行,三个整数$T,M,N$. 接下来的$N$行,每行两个整数$u_i,v_i$($i$从$1$开始编号).允许$u_i=v_i$,也允许同样的简单词多次出现. ...

  6. RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式

    使用Redis 对问题下的回答按点赞数排序的思路; 1根据问题id查出所有的回答列表; 2吧回答的ids添加到zset1中; key为id,value为赞的数量;(用于点赞排行); //批量添加 Lo ...

  7. vi 学习

    1,光标移动 1)h:左:l:右:j:下:k:上:和方向键不同的是,不会造成折行 2)0:行首:$行尾:G:最后一行第一个字符;gg:第一行第一个字符:^:本行第一个非空白字符:H:移至屏幕第一个字符 ...

  8. Hibernate动态条件查询(Criteria Query)

    1.创建一个Criteria实例net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询.Session是用来制造Criteria实例的工厂. Criteria cri ...

  9. MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比

    系统环境: Ubuntu 18.04 数据库 MysSQL5.7/MongoDB4.0 插入的数据为随机生产,不重复. MySQL使用的连接库是 sqlalchemyMongoDB使用的连接库是pym ...

  10. Zookeeper(四))持久化日志文件

    Zookeeper(四))持久化日志文件 持久化用途 存储两种文件 snapshot:内存快照 log:事务日志,类似MySQL的binlog,存储数据节点的操作日志 问题 序列化的本质其实就是将原数 ...