空数组和空对象均为真值,需用arr.length===0和object.keys(obj).length===0准确判断是否为空,避免使用!arr或!obj等错误方式。

在 JavaScript 中,空数组 [] 和空对象 {} 都是“真值”(truthy),哪怕它们看起来“什么都没有”。这和 null、undefined、0、''(空字符串)、false、NaN 这类“假值”(falsy)完全不同。直接用 if (arr) { ... } 或 if (obj) { ... } 只能判断它们是否为 null 或 undefined,**无法判断是否为空**——这是最常踩的逻辑陷阱。
怎么准确判断空数组
别依赖 if (arr),它对 [] 恒为 true。应检查其长度:
-
推荐写法:用
Array.isArray(arr) && arr.length === 0—— 先确保是数组,再看长度是否为 0 - 如果已知变量一定是数组(比如函数参数做了类型约定),可简写为
arr.length === 0 - 避免用
!arr.length,虽然结果正确,但可读性差,且容易和!arr混淆(后者永远为false)
怎么准确判断空对象
{} 是对象,也是真值;Object.keys(obj).length === 0 是最常用且可靠的方式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
推荐写法:用
obj != null && typeof obj === 'object' && !Array.isArray(obj) && Object.keys(obj).length === 0—— 兼顾非空、是对象、非数组、无自有属性 - 若确定是普通对象(比如配置项、响应数据),可简化为
Object.keys(obj).length === 0 - 注意:
JSON.stringify(obj) === '{}'虽然直观,但性能差、不处理不可枚举属性、会忽略undefined值,不推荐用于生产环境
更安全的封装建议
把判断逻辑抽成小函数,提升复用性和可读性:
-
isBlankArray(arr) → 返回
Array.isArray(arr) && arr.length === 0 -
isBlankObject(obj) → 返回
obj != null && typeof obj === 'object' && !Array.isArray(obj) && Object.keys(obj).length === 0 - 必要时还可加
isEmpty(value)统一处理:对数组查length,对对象查keys,对字符串用trim() === '',其余按 falsy 判断
常见错误写法避坑
这些写法看似合理,实则隐患明显:
-
if (!arr)→[]是真值,此条件永不成立 -
if (arr == false)→ 触发抽象相等转换,[] == false居然为true(因[]转数字为0,0 == false),但极其危险且不可靠 -
if (JSON.stringify(obj) === '{}')→ 如前所述,性能差、语义模糊、有边界问题 -
for...in循环判空 → 若原型链上有可枚举属性,会误判为“非空”,必须配合hasOwnProperty
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










