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


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中动态效果小结
Dec 16 Javascript
jQuery+ajax实现动态执行脚本的方法
Jan 27 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
Jan 27 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
JS数组去重(4种方法)
Mar 27 Javascript
JSON 数据格式详解
Sep 13 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
Node.js搭建小程序后台服务
Jan 03 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 Javascript
ES6字符串的扩展实例
Dec 21 Javascript
vue 数字翻牌器动态加载数据
Apr 20 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
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
JS hashMap实例详解
2016/05/26 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
python远程登录代码
2008/04/29 Python
python基础教程之基本内置数据类型介绍
2014/02/20 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python GUI模拟实现计算器
2020/06/22 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
专升本个人自我评价
2013/12/22 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
防汛工作情况汇报
2014/10/28 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
Python基础详解之邮件处理
2021/04/28 Python
详解Python自动化之文件自动化处理
2021/06/21 Python
如何通过cmd 连接阿里云服务器
2022/04/18 Servers