在 JavaScript 中,判空(检查变量是否为“空”值)需要针对不同数据类型进行区分。根据你的需求,“空”包括:空数组、空对象、空字符串、0、undefined、null、空 Map、空 Set。
1. 严格判空(仅 null 或 undefined)
if(value==null){// 等价于 value === null || value === undefinedconsole.log("值为 null 或 undefined");}2. 宽松判空(包括空字符串、空数组、空对象等)
方法 1:自定义 isEmpty 函数
functionisEmpty(value){return(value==null||// null 或 undefined(typeofvalue==="string"&&value.trim()==="")||// 空字符串或全空格(Array.isArray(value)&&value.length===0)||// 空数组(typeofvalue==="object"&&Object.keys(value).length===0)||// 空对象(valueinstanceofMap&&value.size===0)||// 空 Map(valueinstanceofSet&&value.size===0)// 空 Set// 注意:0 不算空,除非额外处理);}// 测试console.log(isEmpty(null));// trueconsole.log(isEmpty(undefined));// trueconsole.log(isEmpty(""));// trueconsole.log(isEmpty(" "));// trueconsole.log(isEmpty([]));// trueconsole.log(isEmpty({}));// trueconsole.log(isEmpty(newMap()));// trueconsole.log(isEmpty(newSet()));// trueconsole.log(isEmpty(0));// false(默认不算空,除非修改逻辑)方法 2:如果 0 也算空
functionisEmpty(value){return(value==null||(typeofvalue==="string"&&value.trim()==="")||(Array.isArray(value)&&value.length===0)||(typeofvalue==="object"&&Object.keys(value).length===0)||(valueinstanceofMap&&value.size===0)||(valueinstanceofSet&&value.size===0)||value===0// 0 也算空);}console.log(isEmpty(0));// true3. 特殊情况处理
(1)0 是否算空?
- 默认情况下,0 是一个有效的数字,不算空。
- 如果业务上需要 0 也算空,可以在 isEmpty 里加上 value === 0。
(2)false 是否算空?
- false 是布尔值,通常不算空,除非特别处理。
(3)NaN 是否算空?
- NaN 是无效数字,可以额外判断:
Number.isNaN(value)4. 完整判空方案(推荐)
functionisEmpty(value,treatZeroAsEmpty=false){return(value==null||(typeofvalue==="string"&&value.trim()==="")||(Array.isArray(value)&&value.length===0)||(typeofvalue==="object"&&Object.keys(value).length===0)||(valueinstanceofMap&&value.size===0)||(valueinstanceofSet&&value.size===0)||(treatZeroAsEmpty&&value===0)// 可选:0 是否算空);}// 使用console.log(isEmpty(0));// falseconsole.log(isEmpty(0,true));// true(0 算空)5. 总结
| 数据类型 | 判空方式 |
|---|---|
| null / undefined | value == null |
| 空字符串 “” | value === “” 或 value.trim() === “” |
| 空数组 [] | Array.isArray(value) && value.length === 0 |
| 空对象 {} | Object.keys(value).length === 0 |
| 空 Map | value instanceof Map && value.size === 0 |
| 空 Set | value instanceof Set && value.size === 0 |
| 0 | 默认不算空,除非额外处理 |
| false | 通常不算空 |
| NaN | Number.isNaN(value) |
6. 最终推荐
functionisEmpty(value,options={treatZeroAsEmpty:false}){return(value==null||(typeofvalue==="string"&&value.trim()==="")||(Array.isArray(value)&&value.length===0)||(typeofvalue==="object"&&Object.keys(value).length===0)||(valueinstanceofMap&&value.size===0)||(valueinstanceofSet&&value.size===0)||(options.treatZeroAsEmpty&&value===0));}