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


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 相关文章推荐
不用写JS也能使用EXTJS视频演示
Dec 29 Javascript
javascript+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
js的toLowerCase方法用法实例
Jan 27 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
关于webpack2和模块打包的新手指南(小结)
Aug 07 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
vue+element+Java实现批量删除功能
Apr 08 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
意向书范文
2014/03/31 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
跑吧孩子观后感
2015/06/10 职场文书
企业安全生产检查制度
2015/08/06 职场文书
学生病假条范文
2015/08/17 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
安全生产协议书
2016/03/22 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA