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


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 相关文章推荐
js中window.open打开一个新的页面
Aug 10 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
Javascript数组操作函数总结
Feb 05 Javascript
jQuery实现带动画效果的二级下拉导航方法
Mar 11 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
Jun 17 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
JavaScript判断数组类型的方法
Oct 23 Javascript
vue 实现特定条件下绑定事件
Nov 09 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
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP中str_replace函数使用小结
2008/10/11 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Linux下python3.7.0安装教程
2018/07/30 Python
超简单使用Python换脸实例
2019/03/27 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
企业理念标语
2014/06/09 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers
关于vue-router-link选择样式设置
2022/04/30 Vue.js
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android