最稳妥的方式是先用array.isarray()确认变量为数组,再检查arr.length === 0;该组合类型安全、语义清晰,可准确区分空数组与null、undefined、类数组等非数组值。

最稳妥的方式是先确认变量是数组,再检查其长度是否为 0。
用 Array.isArray() + .length === 0
这是最推荐的组合,兼顾类型安全和语义清晰:
- Array.isArray(arr) 确保不是类数组、null、undefined 或其他对象
- arr.length === 0 直接反映数组是否“空”,不依赖 toString()、JSON.stringify() 等间接方式
示例:
function isEmptyArray(arr) {
return Array.isArray(arr) && arr.length === 0;
}
<p>isEmptyArray([]); // true
isEmptyArray([1]); // false
isEmptyArray(null); // false
isEmptyArray({}); // false
isEmptyArray({ length: 0 }); // false(不是数组)
</p>
避免常见陷阱
这些写法看似简洁,但有明显隐患:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
!arr || !arr.length:对
null、undefined、false、0、""都返回 true,误判风险高 -
arr == [] 或 arr.toString() === "":类数组或自定义
toString的对象可能被错误判定 - JSON.stringify(arr) === "[]":性能差,且无法处理含函数、undefined、循环引用等值的数组
如果需要兼容老旧环境(如 IE8)
可改用 Object.prototype.toString.call(arr) === '[object Array]' 替代 Array.isArray:
function isEmptyArray(arr) {
return Object.prototype.toString.call(arr) === '[object Array]' && arr.length === 0;
}
现代项目中直接用 Array.isArray 即可,它已被所有主流浏览器和 Node.js 支持多年。
扩展:想同时支持“空数组”和“假值”?明确分离逻辑
如果业务上真需要把 null、undefined 也当作“空”,不要混在同一个判断里,而是分层处理:
- 先做存在性校验:
if (arr == null) { /* 处理空值 */ } - 再做数组校验:
else if (Array.isArray(arr)) { /* 处理数组 */ }
这样逻辑清晰,便于维护和测试,也避免后续误用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










