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


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 相关文章推荐
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
jquery实现网站超链接和图片提示效果
Mar 21 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python安装OpenCV的示例代码
2020/03/05 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
培训演讲稿范文
2014/01/12 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
医师定期考核实施方案
2014/05/07 职场文书
老公保证书怎么写
2015/02/26 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书