null 和 undefined 是 JavaScript 中唯一一对在 == 下相等但类型不同的原始值;它们语义同属“空缺状态”,故 == 返回 true,而与其他值(如 0、false、"")比较均为 false。

记住一句话:**null 和 undefined 是 JavaScript 中唯一一对在 == 下相等、但类型完全不同的原始值**。
null == undefined 是语言层的“特赦条款”
这不是逻辑推导出来的,而是 ECMAScript 规范明确写死的特殊规则——仅此一对。其他任何值(比如 0、false、"")和 null 或 undefined 用 == 比较,都不成立。
- null == undefined → true(唯一被允许的跨类型“平等”)
- null == 0 → false
- undefined == false → false
- null == "" → false
用“空缺状态”来理解语义一致性
null 表示“有定义,但主动设为空”;undefined 表示“未定义,或尚未赋值”。它们都指向一种“值不存在”的语义层级——不是数字零、不是布尔假、不是空字符串,而是更底层的“缺位”。== 把它们归为一类,本质是承认这种语义上的同类性。
就像问“这个人有没有身份证?”
→ “没发证”(null)和“还没办证”(undefined)答案都是“目前没有”,所以 == 判定为真;
但“没发证”不等于“身份证号是 000”,也不等于“本人拒绝出示”,所以不和 0、false 等混同。
实战记忆法:三步速判
遇到 == 判断,心里默念:
立即学习“Java免费学习笔记(深入)”;
- 如果一边是 null 或 undefined,另一边也必须是 null 或 undefined 才可能为 true
- 只要其中一个是 0、false、""、[]、{} 等,结果一定是 false
- 想保险?直接用 === —— 它不搞特赦,null === undefined 永远是 false
这个规则不复杂,但容易忽略细节。真正掌握的关键,是把它当作一个孤立的、有明确定义的例外,而不是试图用类型转换规则去反推。


















