当前位置: 首页 > news >正文

JS判断对象是否为空的方法

在 JavaScript 中,判断一个对象是否为空对象(即没有自身可枚举属性),可以通过以下方法实现:

方法 1:使用 Object.keys()

javascript

function isEmptyObject(obj) {
  // 确保是普通对象(排除 null、数组和其他对象类型)
  return Object.prototype.toString.call(obj) === '[object Object]' && 
    Object.keys(obj).length === 0;
}

方法 2:使用 for...in 循环

javascript

function isEmptyObject(obj) {
  if (Object.prototype.toString.call(obj) !== '[object Object]') {
    return false;
  }
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      return false;
    }
  }
  return true;
}

方法 3:使用 JSON.stringify()

javascript

function isEmptyObject(obj) {
  try {
    return Object.prototype.toString.call(obj) === '[object Object]' && 
      JSON.stringify(obj) === '{}';
  } catch (e) {
    return false; // 处理循环引用异常
  }
}

说明:

  1. 类型检查
    使用 Object.prototype.toString.call(obj) === '[object Object]' 确保目标是一个普通对象(如 {} 或 new Object()),排除数组、null、日期等特殊对象类型。

  2. 检查属性

    • Object.keys(obj).length === 0:仅检查对象自身的可枚举属性。

    • for...in + hasOwnProperty:遍历对象自身属性,避免原型链干扰。

    • JSON.stringify():将对象转换为字符串判断,但无法处理不可枚举属性和循环引用。

  3. 边界情况

    • 若对象只有 Symbol 属性或不可枚举属性,上述方法可能返回 true(需用 Reflect.ownKeys() 检测所有属性)。

    • 非对象类型(如 null、数字)直接返回 false


使用示例:

javascript

isEmptyObject({});          // true
isEmptyObject({ a: 1 });    // false
isEmptyObject([]);          // false
isEmptyObject(null);        // false
isEmptyObject(Object.create(null)); // true
isEmptyObject(new Date());  // false

根据实际需求选择合适的方法,通常推荐 方法 1 或 方法 2

http://www.dtcms.com/a/102904.html

相关文章:

  • 移动端六大语言速记:第4部分 - 数据结构
  • Linux环境下Ollama升级及Gemma3模型部署指南
  • 突发,国行 iPhone 17,支持 eSIM
  • C# 事件(Event)
  • 【Linux】Linux 系统启动流程详解
  • 深入理解 POSIX 线程 (pthread):从基础到高级应用
  • 3-栈、队列、数组
  • AIGC(生成式AI)试用 29 -- 用AI写读书笔记
  • 【 Vue 2 中的 Mixins 模式】
  • AI换脸工具--FaceFusion 整合包
  • 13 配置Hadoop集群-测试使用
  • harmony OS NEXT-沉浸式布局实现笔记
  • CSS层叠顺序
  • 算法竞赛备赛——【数据结构】并查集
  • Hexo + Fluid博客实现自定义图标
  • Verilog HDL 100道面试题及参考答案
  • 目前市场上,好用的校招系统是哪个?
  • 我与数学建模之启程
  • C/C++网络编程【1】----- 大纲
  • 【深度视觉】第十八章:YOLO系列1
  • Jetpack Room 使用与原理解析
  • Vue2 vs Vue3 生命周期全面对比:created 的进化与革新!!!
  • String数据结构之验证码实战
  • Unity3D仿星露谷物语开发32之地面属性决定角色动作
  • 【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】
  • 数据库表省市区分析
  • Kubernetes可视化面板——KubePi(Kubernetes Visualization Panel - kubepi)
  • Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
  • Outlook客户端无法连接到服务器,添加账户显示“无网络连接,请检查你的网络设置,然后重试。[2603]”
  • 优秀的 React 入门开源项目推荐