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


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 面向对象编程
Oct 28 Javascript
jQuery获得内容和属性方法及示例
Dec 02 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 Javascript
解决微信小程序中的滚动穿透问题
Sep 16 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
浅谈php扩展imagick
2014/06/02 PHP
php实现可运算的验证码
2015/11/10 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
python 生成目录树及显示文件大小的代码
2009/07/23 Python
跟老齐学Python之模块的加载
2014/10/24 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
研究生自荐信
2013/10/09 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
银行简历自我评价
2014/02/11 职场文书
集体备课反思
2014/02/12 职场文书
贷款委托书范本
2014/04/08 职场文书
卖房协议书样本
2014/10/30 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
交通事故责任认定书
2015/08/06 职场文书