如何检查一个对象是否为空


Posted in Javascript onApril 11, 2019

检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓

这里的空指的是对象没有自有属性

假设这里有两个对象,一个是 obj 一个是 anotherObj

let obj1 = {
  name: 'oli',
  child: {
    name: 'oliver'
  }
}

let obj2 = {
  [Symbol('name')]: 'alice'
}

let obj3 = Object.defineProperty({}, 'name', {
  value: 'alice',
  enumerable: false
})

let obj4 = Object.create(null)

// 我们需要一个函数,判断是否不含自有属性

isEmpty(obj1) // false
isEmpty(obj2) // false
isEmpty(obj3) // false
isEmpty(obj4) // true

想了半天查看对象是否有 Symbol 属性只能使用 getOwnPropertySymbols 方法,如果还有更好的方法欢迎留言

方法一:遍历

for-in 遍历,并通过 hasOwnProperty 方法确认是否存在某个 key 这种方法不能够遍历到 enumerable 为 false 的属性

const isEmptyObj = object => {
  if (!!Object.getOwnPropertySymbols(object).length) {
    return false
  }
  for (const key in object) {
    if (object.hasOwnProperty(key)) {
      return false
    }
  }
  return true
}

方法二:keys 方法

使用 Object 静态方法 keys 然后判断 length 即可,keys 返回的是自身可枚举属性,因此同样的不可遍历到 enumerable 为 false 的属性

const isEmptyObj = object => {
  if (!!Object.getOwnPropertySymbols(object).length) {
    return false
  }
  if (Object.keys(object).length) {
    return false
  }
  return true
}

方法三:JSON 方法

使用 JSON Stringify 方法将对象转为字符串,与字符串 '{}' 对比,同样该方法无法获取到不可遍历属性

const isEmptyObj = object => {
  if (!!Object.getOwnPropertySymbols(object).length) {
    return false
  }
  return JSON.stringify(object) === '{}'
}

。

方法四:getOwnPropertyNames 方法

使用 Object 的 getOwnPropertyNames 方法,获取所有属性名,这样就算是不可枚举属性依然能够获取到,算是比较 ok 的方法。

const isEmptyObj = object => {
  if (!!Object.getOwnPropertySymbols(object).length) {
    return false
  }
  if (!!Object.getOwnPropertyNames(object).length) {
    return false
  }
  return true
}

如何检查一个对象是否为空

简化版:

const isEmptyObj = object => !Object.getOwnPropertySymbols(object).length && !Object.getOwnPropertyNames(object).length

以上所述是小编给大家介绍的js如何检查一个对象是否为空详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 获取页面的高度及滚动条的位置的代码
May 06 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
Oct 14 Javascript
JavaScript数组常用方法
Mar 02 Javascript
js同源策略详解
May 21 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
AngularJS表单提交实例详解
Feb 18 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
详解vue2.0模拟后台json数据
May 16 Javascript
Vue extend的基本用法(实例详解)
Dec 09 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 #Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 #Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 #Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 #Javascript
Vue开发Html5微信公众号的步骤
Apr 11 #Javascript
跟混乱的页面弹窗说再见
Apr 11 #Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 #Javascript
You might like
PHP二维数组的去重问题解析
2011/07/17 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php数组转成json格式的方法
2015/03/09 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
python抽象基类用法实例分析
2015/06/04 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
公司营业员的工作总结自我评价
2013/10/05 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
2019秋季运动会口号
2019/06/25 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python