JavaScript中空值处理需区分类型转换与空值判断:Number(null)→0、Number(undefined)→NaN、Boolean(null/undefined)→false;应避免==隐式转换,优先用===或??操作符安全赋默认值。

JavaScript 中处理空值转换,核心是分清“类型转换”和“空值判断”两个层面:类型转换本身不会把 null 或 undefined 变成“空”,但隐式或显式转换会产出特定结果;而真正要“处理空值”,得靠主动判断或现代操作符干预。
空值在类型转换中的默认行为
JS 在类型转换时对 null 和 undefined 有固定映射:
-
Number(null)→0(注意:这是历史遗留设计,容易引发误判) -
Number(undefined)→NaN -
String(null)→"null"(字符串字面量) -
String(undefined)→"undefined" -
Boolean(null)、Boolean(undefined)→ 都为false
这些不是“空值被转为空”,而是语言规范定义的强制转换规则。比如 if (null) {...} 不执行,是因为布尔转换后为 false,而非它“代表空”。
避免隐式转换导致的空值误判
用 == 比较时,null == undefined 为 true,但 null == 0 或 undefined == "" 都是 false;而 + 运算中:null + 1 → 1(因 null 被转为 0),undefined + 1 → NaN。这类行为极易埋下 bug。
立即学习“Java免费学习笔记(深入)”;
建议统一使用严格相等 === 判断空值:
- 检查是否为
null:value === null - 检查是否为
undefined:value === undefined或更安全地用typeof value === 'undefined' - 同时检查两者:
value == null(利用null == undefined的宽松特性,简洁且常用)
用 ?? 操作符做安全的空值转换
当需要给变量设置默认值,又不想误伤 0、false、"" 等合法假值时,用空值合并运算符 ??:
-
const name = user.name ?? '匿名用户'—— 仅当user.name是null或undefined时才生效 - 对比
||:0 || '缺省'→'缺省',但0 ?? '缺省'→0 - 可链式使用:
a ?? b ?? c ?? 'default'
过滤数组/对象中的空值
对集合类数据做“净化”,常见需求是剔除 null、undefined、"":
- 只剔除
null/undefined:arr.filter(x => x != null) - 剔除所有假值(含
0、false、""):arr.filter(Boolean) - 精准剔除空字符串和空值:
arr.filter(x => x !== null && x !== undefined && x !== '') - 对象取值前防御:
const title = obj?.title ?? '暂无标题'(结合可选链与 ??)



















