背景

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. 卸载python3

    rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3 whereis python3 |xargs rm -frv 删除 ...

  2. kubernets轻量 contain log 日志收集技巧

    首先这里要收集的日志是容器的日志,而不是集群状态的日志 要完成的三个点,收集,监控,报警,收集是基础,监控和报警可以基于收集的日志来作,这篇主要实现收集 不想看字的可以直接看代码,一共没几行,尽量用调 ...

  3. CentOS-SendMail服务

    title date tags layout music-id CentOS6.5 SendMail服务安装与配置 2018-09-04 Centos6.5服务器搭建 post 456272749 一 ...

  4. springboot整合mybatis报错:Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation...

    <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis- ...

  5. spring mvc 设置@Scope("prototype")

    spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得be ...

  6. [LC] 150. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  7. Java基础 带你深刻理解自动装箱,拆箱含义

    1.什么是装箱,什么是拆箱装箱:把基本数据类型转换为包装类.拆箱:把包装类转换为基本数据类型.基本数据类型所对应的包装类:int(几个字节4)- Integerbyte(1)- Byteshort(2 ...

  8. stack|session|fuss|anniversary

    N-COUNT A stack of things is a pile of them. 摞; 堆 例: There were stacks of books on the bedside table ...

  9. SpringMVC中Interceptor和Filter区别

    Interceptor 主要作用:拦截用户请求,进行处理,比如判断用户登录情况,权限验证,主要针对Action请求进行处理.是通过HandlerInterceptor 实现的. 配置如下: <m ...

  10. 控制webbrowser滚动到指定位置

    在构造函数中添加事件: webBrowser.DocumentCompleted+=new WebBrowserDocumentCompletedEventHandler(webBrowser_Doc ...