== null 是最简洁可靠的判空方式,因规范规定仅 null 和 undefined 互等,故 value == null 等价于 value === null || value === undefined,不误判 0、false、"" 等 falsy 值。

直接用 == null 是最简洁、安全且语义明确的判断方式,它只匹配 null 和 undefined,不会误判 0、false、"" 等 falsy 值。
为什么 == null 是可靠选择
ECMAScript 规范明确规定:null == undefined 为 true,且这是唯一一对在抽象相等(==)下互相成立的原始值。其他任何值(包括 0、false、"")与 null 比较都返回 false。因此:
-
value == null等价于value === null || value === undefined - 它不依赖类型转换去“碰巧”成立,而是规范保障的精确行为
- 比手写两个严格相等更简短,比
!value更精准
别用 !value 替代空值判断
!value 检查的是所有 falsy 值,包含:false、0、-0、""、NaN、null、undefined。这会带来逻辑错误:
-
if (!user.age):当user.age = 0(比如年龄为 0 的婴儿)时也会进入分支,不合理 -
if (!name):当name = ""(合法的空用户名)时被过滤,违背业务意图 - 真正想表达“值不存在”,不是“值为假”
需要区分 null 和 undefined 时怎么办
如果业务逻辑要求差异化处理(例如 undefined 表示未初始化,null 表示已清空),就必须用严格相等:
立即学习“Java免费学习笔记(深入)”;
-
value === undefined—— 推荐配合typeof value === 'undefined'更稳妥(避免局部重定义) -
value === null—— 直接且明确 - 不建议用
value == undefined,虽有效但易混淆,且无额外收益
现代开发中的组合用法
在支持 ES2020+ 的环境中,优先结合可选链和空值合并提升健壮性:
-
obj?.prop ?? 'default':安全取值 + 仅对null/undefined提供默认 -
if (obj?.items?.length != null):先可选链防报错,再统一判空 - TypeScript 中类型系统会在编译期提示可能的
null/undefined,大幅降低运行时风险


















