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


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 相关文章推荐
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
js 设置缓存及获取设置的缓存
May 08 Javascript
JS函数重载的解决方案
May 13 Javascript
常用jQuery选择器总结
Jul 11 Javascript
jQuery中nextAll()方法用法实例
Jan 07 Javascript
浅析JavaScript声明变量
Dec 21 Javascript
JS基于面向对象实现的选项卡效果示例
Dec 20 Javascript
详解JavaScript常量定义
Jan 03 Javascript
js 概率计算(简单版)
Sep 12 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
jQuery Raty星级评分插件使用方法实例分析
Nov 25 jQuery
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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
php 文章采集正则代码
2009/12/28 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
python3 深浅copy对比详解
2019/08/12 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
教育专业个人求职信
2013/12/02 职场文书
业务主管岗位职责范本
2013/12/25 职场文书
大三预备党员入党思想汇报
2014/01/08 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
电子商务求职信
2014/06/15 职场文书
六查六看剖析材料
2014/10/06 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
关于公司年会的开幕词
2016/03/04 职场文书