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


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面向对象编程
Mar 02 Javascript
jQueryUI如何自定义组件实现代码
Nov 14 Javascript
基于jquery的一行代码轻松实现拖动效果
Dec 28 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
Sep 05 Javascript
js复制到剪切板的实例方法
Jun 28 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
May 16 Javascript
Paypal支付不完全指北
Jun 04 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
php计算整个目录大小的方法
2015/06/01 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
js实现圆盘记速表
2015/08/03 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
python学习入门细节知识点
2018/03/29 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
使用python接入微信聊天机器人
2020/03/31 Python
python爬虫之遍历单个域名
2019/11/20 Python
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
个人四风问题对照检查材料
2014/09/26 职场文书
会计工作态度自我评价
2015/03/06 职场文书
关爱空巢老人感想
2015/08/11 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python