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


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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
js判断客户端是iOS还是Android等移动终端的方法
Dec 11 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
Oct 18 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 Javascript
浅谈Vue的响应式原理
May 30 Javascript
Vue 2.0双向绑定原理的实现方法
Oct 23 Javascript
基于JavaScript实现省市联动效果
Jun 22 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
相对路径转化成绝对路径
2007/04/10 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
大学生实习期自我评价范文
2013/10/03 职场文书
部队领导证婚词
2014/01/12 职场文书
考试违纪检讨书
2014/02/02 职场文书
公证委托书大全
2014/04/04 职场文书
班组建设经验交流材料
2014/05/12 职场文书
大学生找工作求职信
2014/07/09 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
高一数学教学反思
2016/02/18 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android