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


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 的方法重载效果
Aug 07 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
jquery解决图片路径不存在执行替换路径
Feb 06 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
AngularJS基础 ng-model-options 指令简单示例
Aug 02 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
微信小程序之前台循环数据绑定
Aug 18 Javascript
原生JS实现简单的倒计时功能示例
Aug 30 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 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 程序授权验证开发思路
2009/07/09 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
农村婚礼证婚词
2014/01/10 职场文书
初级会计求职信范文
2014/02/15 职场文书
岗位明星事迹材料
2014/05/18 职场文书
另类冲刺标语
2014/06/24 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
晚会开场白和结束语
2015/05/29 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
旅游安全责任协议书
2016/03/22 职场文书
诉讼和解协议书
2016/03/23 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis