背景

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

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

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

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

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

0. 说明

测试用例

以下是isNull函数的测试用例

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

输入校验

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

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

1. for in 遍历对象的 keys

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

function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
for(keys in obj) {
return false
}
return true
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false

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

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

function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return Object.keys(obj).length === 0
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false

3. Object.getOwnPropertyNames()

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

function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return Object.getOwnPropertyNames(obj).length === 0
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false

4. JSON.stringify()

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

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

function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return JSON.stringify(obj) === '{}'
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_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. 转:lightGBM的黑科技--plot函数

    本来想研究一下lightGBM的plotting相关的接口,发现网上已经有人做了,而且还挺不错的(lightGBM的黑科技--plot函数),就直接给转过来了 # -*- coding: utf-8 ...

  2. pycharm打印出的汉字显示乱码

    pycharm未配置时,默认配置为: 打印汉字时显示乱码 简单设置即可 这下以后就没有问题了.

  3. 自定义控件 监控宿主activity的生命周期

    使用不显示的fragment来监控activity生命周期,fragment生命周期基本上跟随宿主activity变化.我们通过fragment的生命周期就可以知到activity的生命周期 我们自定 ...

  4. Zabbix 监控sqlserver

    转:Zabbix 监控sqlserver 一:Zabbix监控sqlserver 方法一: 1.思路整理 1.在zabbix server上安装Freetds.unixODBC.unixODBC-de ...

  5. http接口与webservice接口的区别

    常见的API接口有两类:http接口和webservice接口. http接口走http协议,通过路径来区分调用方法,请求报文一般是key-value形式的,返回报文一般是json串,常用的是get和 ...

  6. jquery学习随笔

    转)jquery学习随笔(jquery选择器)   jQuery的选择器是CSS 1-3,XPath的结合物.jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查询语言. ...

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

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

  8. Klotski's Blog

    教材: 唐朔飞 编著 "计算机组成原理(第2版)"高等教育出版社 2008年1月 习题指导教材: 唐朔飞 编著 "计算机组成原理–学习指导与习题解答(第2版)" ...

  9. git 忽略规则

    # 以'#'开始的行,被视为注释. # 忽略掉所有文件名是 foo.txt的文件. foo.txt # 忽略所有生成的 html文件, *.html # foo.html是手工维护的,所以例外. !f ...

  10. python3下scrapy爬虫(第二卷:初步抓取网页内容之直接抓取网页)

    上一卷中介绍了安装过程,现在我们开始使用这个神奇的框架 跟很多博主一样我也先选择一个非常好爬取的网站作为最初案例,那么我先用屌丝必备网站http://www.shaimn.com/xinggan/作为 ...