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


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 相关文章推荐
Firefox window.close()的使用注意事项
Apr 11 Javascript
jquery之empty()与remove()区别说明
Sep 10 Javascript
js获取checkbox复选框选中的选项实例
Aug 24 Javascript
Javascript进制转换实例分析
May 14 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 Javascript
jQuery实现的文字hover颜色渐变效果实例
Feb 20 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
详解Vue方法与事件
Mar 09 Javascript
详解升级react-router 4 踩坑指南
Aug 14 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
Nov 30 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
Jul 29 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
关于 angularJS的一些用法
2017/11/29 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
python 把列表转化为字符串的方法
2018/10/23 Python
python aiohttp的使用详解
2019/06/20 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
平面设计岗位职责
2013/12/14 职场文书
开幕式邀请函
2015/01/31 职场文书
安全教育片观后感
2015/06/17 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
使用python求解迷宫问题的三种实现方法
2022/03/17 Python