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


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 使用手册(二)
Sep 23 Javascript
Javascript浅谈之this
Dec 17 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
May 14 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
浅析Vue下的components模板使用及应用
Nov 27 Javascript
JS正则表达式常见函数与用法小结
Apr 13 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
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
easyui的tabs update正确用法分享
2014/03/21 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
pandas数据集的端到端处理
2019/02/18 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python实现移位加密和解密
2019/03/22 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
自我评价个人范文
2013/12/16 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript