背景

JavaScript 的基本类型(number, string, boolean, null, undefined, symbol)在变量中存储的是值本身。两个基本类型在进行比较时,会比较值

  1. let apple = 1; // 变量 apple 中存放的就是 1
  2. let banana = 1;
  3. apple === banana; // true

我们在小学二年级学过,JavaScript 中的Object引用类型,变量中存储的是对象在内存空间中的地址引用。我们无法比较两个对象,否则我们将得到一个预期之外的结果

  1. let tree = {}; // 变量 tree 中存放的实际上是 {} 在内存中的地址,如: 0x0001
  2. tree == {}; // false
  3. tree === {}; // false

那么我们该如何判断一个对象是空对象{}呢?

0. 说明

测试用例

以下是isNull函数的测试用例

  1. test1 = 1;
  2. test2 = {};
  3. test3 = {a:1,b:2};

输入校验

为了校验参数输入,我们通过调用Object.prototype.toString()来判断参数是否为对象

  1. Object.prototype.toString.call(obj)!=='[object Object]'

1. for in 遍历对象的 keys

MDN: for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性

  1. function _isNull(obj) {
  2. if(Object.prototype.toString.call(obj)!=='[object Object]') {
  3. return 'Type Error'
  4. }
  5. for(keys in obj) {
  6. return false
  7. }
  8. return true
  9. }
  10. _isNull(test1); // "Type Error"
  11. _isNull(test2); // true
  12. _isNull(test3); // false

2. 判断 Object.keys() 的长度

MDN: Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in循环遍历该对象时返回的顺序一致

  1. function _isNull(obj) {
  2. if(Object.prototype.toString.call(obj)!=='[object Object]') {
  3. return 'Type Error'
  4. }
  5. return Object.keys(obj).length === 0
  6. }
  7. _isNull(test1); // "Type Error"
  8. _isNull(test2); // true
  9. _isNull(test3); // false

3. Object.getOwnPropertyNames()

MDN: Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组

  1. function _isNull(obj) {
  2. if(Object.prototype.toString.call(obj)!=='[object Object]') {
  3. return 'Type Error'
  4. }
  5. return Object.getOwnPropertyNames(obj).length === 0
  6. }
  7. _isNull(test1); // "Type Error"
  8. _isNull(test2); // true
  9. _isNull(test3); // false

4. JSON.stringify()

MDN: JSON.stringify()方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串

先将对象转换成 JSON 字符串,然后比较 JSON 字符串与{}

  1. function _isNull(obj) {
  2. if(Object.prototype.toString.call(obj)!=='[object Object]') {
  3. return 'Type Error'
  4. }
  5. return JSON.stringify(obj) === '{}'
  6. }
  7. _isNull(test1); // "Type Error"
  8. _isNull(test2); // true
  9. _isNull(test3); // false

总结

本文简单说明了 JavaScript 的基本类型和引用类型的区别,并介绍了四种判断对象是否为空的方法。

JavaScript判断一个对象是否为空的更多相关文章

  1. JavaScript 判断一个对象{}是否为空对象的简单方法

    第一种: function isEmptyObject(obj) { for (var key in obj) { //返回false,不为空对象 return false; } return tru ...

  2. JS心得——判断一个对象是否为空

    判断一个对象是否为空对象,本文给出三种判断方法: 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带的. ...

  3. 使用js判断一个对象是否为空 比如 obj={}

    今天使用到js判断一个对象是否为空,js没有封装好的方法,这里最好的办法就是使用jquery里面的封装好的方法 $.isEmptyObject(obj)

  4. JS——判断一个对象是否为空

    判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带 ...

  5. js判断一个对象{}是否为空对象,没有任何属性

    // js如何判断一个对象{}是否为空对象,没有任何属性 if (typeof model.rows === "object" && !(model.rows in ...

  6. JS如何判断一个对象是否为空、是否有某个属性

    一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...

  7. [转]JS如何判断一个对象是否为空、是否有某个属性

    原文地址:https://www.cnblogs.com/crackedlove/p/10039105.html 一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 ...

  8. js/jquery判断一个对象是否为空

    一.js判断一个对象是否为空对象 1)通过JSON自带的.stringify方法来判断 //JSON自带的stringify方法,将json转成json字符串 var c = {}; if(JSON. ...

  9. 判断一个对象是否为空?怎么得到一个对象的第几个键名(key)?

    var obj = {"微信":[],"qq":[]} console.log( Object.keys(obj) ) // ["微信",& ...

随机推荐

  1. IDEA Maven项目中添加tomcat没有无artifact选项

    IntelliJ使用 ##使用IntelliJ IDEA配置web项目时,选择Edit Configration部署Tomcat的Deployment可能会出现以下情况: 导致新手部署过程中摸不着头脑 ...

  2. 项目部署篇之二——linux下安装jdk1.8

    1.下载jdk1.8 百度云下载后,直接通过xftp拖到你想放的目录下就行了,实在方便 链接:https://pan.baidu.com/s/1hQl0_3owT776lRO9mHSbXA 提取码:2 ...

  3. 初始化方法,init,构造器

    1.继承于NSObject class student: NSObject { var name : String? var age : Int = var friend : Int = init(n ...

  4. Qt .pro文件详解

    在我们创建Qt工程项目时,Qt Creator总会创建一个.pro文件,我们称.pro文件为Qt的工程管理文件.一个工程项目可以包含一个或多个.pro文件.理解和掌握pro文件的用法,将有利于Qt开发 ...

  5. 函数动态参数和Python中的三种空间

    动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...

  6. JDBC介绍和Mybatis运行原理及事务处理

    本博客内容非自创,转载自以下三位,侵删: https://juejin.im/post/5ab7bd11f265da23906bfbc5 https://my.oschina.net/fifadxj/ ...

  7. dtree加载菜单基本使用方法

    步骤1:官网下载dtree.zip包,官网地址:http://destroydrop.com/javascripts/tree/,文件包括dtree.css,dtree.js和api.html和例子: ...

  8. javascript常用知识汇总

    javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...

  9. 成组vs成对|H1是受保护的|U检验

    生物统计与实验设计 样本均值的分布推导 概率密度曲线上每点x取值概率是不相等的.标准化是转化为无量纲的表面误差,该分布是误差分布,置信区间是可接受该误差是随机误差的误差区间.上面的部分是该估计参数与平 ...

  10. sm4算法(附源码、测试代码)

    from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...