前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库宽松相等 null undefined 相等性
JavaScript值与类型

null == undefined 为什么是 true?== 和 === 对空值的处理有什么不同?

=== 要求类型一致,null 和 undefined 类型不同所以返回 false。== 为这两个值开了特例:它们只和彼此相等,不会被转成 0 或空字符串。所以 value == null 能同时判断两种空值。

前端进阶之旅 · 一题精讲更新于 2026.09.29
JavaScript#值与类型
先看核心答案读代码示例
理解线索

两种空值的相等规则

  1. null由代码显式赋值,表示"没有值"
  2. undefined变量未赋值、缺少参数、不存在的属性
  3. 配对规则== 里它们只和彼此相等,不转成数字也不匹配其他假值

typeof null 返回 "object" 是历史遗留问题,不代表 null 真的是对象。

核心回答

先记住这个答案

=== 先比类型,null 的类型是 Null,undefined 的类型是 Undefined,类型不同直接返回 false。== 则在 ECMAScript 规范里为 null 和 undefined 专门设了一条规则:二者互相宽松相等,且不会和其他任何值宽松相等。这意味着 value == null 能同时匹配 null 和 undefined,但不会误匹配 0、false 或空字符串。

  • null === undefined 为 false
  • null == undefined 为 true
  • 空值宽松相等有专门规则
  • value == null 是简洁的空值检查写法

null 和 undefined 跟其他假值的比较

0、false、空字符串和 null、undefined 都是假值,但在 == 的世界里它们并不互通。null 和 undefined 组成一个封闭的小圈子:只和对方相等,不会被转成数字去和别人比。

null 和 undefined 不匹配其他假值JavaScript
console.log(null === undefined);
console.log(null == undefined);
console.log(null == 0);
console.log(null == false);
console.log(null == '');
console.log(undefined == 0);
console.log(undefined == false);
查看输出与解释
false
true
false
false
false
false
false

除了 null == undefined 是 true,其余全是 false。如果 == 把 null 转成数字,Number(null) 是 0,那 null == 0 就该是 true。但实际上 null 在 == 里根本不会走 ToNumber 这条路,规范专门规定了它和 undefined 只配对彼此。 这条规则让 value == null 成了一个很好用的写法:它只在 value 是 null 或 undefined 时成立,不会误匹配数字 0 或布尔 false。

value == null 的使用场景和边界

在实际项目里,你经常需要判断一个值是不是"空的"。写成 value === null || value === undefined 有点长,value == null 做的是同一件事,更简洁。不少团队在 ESLint 里开了 eqeqeq 规则但给 == null 留了豁免。

不过也有要区分的时候。比如 GraphQL 请求里,字段缺失(undefined)意味着"不修改这个字段",字段显式传了 null 意味着"清空这个字段"。这时候就不能用 == null 一把抓,需要用 === undefined 或 === null 分别处理,或者检查对象上是否存在这个属性。

Object.is 和 === 对空值的行为JavaScript
console.log(Object.is(null, undefined));
console.log(Object.is(null, null));
console.log(Object.is(undefined, undefined));
查看输出与解释
false
true
true

Object.is 使用 SameValue 算法,不做宽松转换。它和 === 对 null、undefined 的结果完全一致,区别只在对 NaN 和 -0 的处理上。

回答前,多想一步

容易答错的地方

认为 null == 0 是 true
直觉上 Number(null) 是 0,所以很多人以为 null == 0 也是 true。但 == 遇到 null 时不会走 ToNumber 转换,而是直接走配对规则——null 只和 undefined 相等。这是规范里的硬编码特例,和类型转换无关。
用 typeof 区分 null 和 undefined
typeof undefined 返回 "undefined",但 typeof null 返回 "object"。这是 JavaScript 第一版实现时遗留的 bug,一直没修因为会破坏已有代码。用 typeof 没法判断 null,要判断 null 可以直接 value === null。
试着用自己的话回答

面试官还会怎么问?

typeof null 为什么返回 "object"?

JavaScript 最早的实现里,值在内存中用一个类型标签加数据表示。对象的标签是 0,而 null 在底层是空指针(全零),所以 typeof 把它当成了对象。这个行为在 ES6 曾经有提案修复,但因为会破坏太多已有网站被否决了。

怎样只检查 undefined 而不匹配 null?

直接用 value === undefined。如果担心全局变量 undefined 被覆盖(在非严格模式的旧代码里理论上可以),可以用 typeof value === 'undefined',它对未声明的变量也不会报错。

?? 和 == null 判断的范围一样吗?

一样。value ?? fallback 在 value 为 null 或 undefined 时使用 fallback,和 value == null 匹配的范围完全相同。区别是 ?? 用来选值,== null 用来做判断。

从一道题,走向一组知识

把知识连起来

值与类型

JS 里的 1e3 是什么意思?指数表示法有哪些容易踩的坑?

== 碰到字符串和数字时走 ToNumber,但碰到 null 和 undefined 时不走这条路,对比来看更清楚。

值与类型

JS 里什么运算会产生 Infinity?它参与计算时有哪些特殊行为?

Infinity 是合法数字,null 转数字得 0,但 null == 0 仍然是 false,因为 null 走的是专门的配对规则。

参考资料

  • JavaScript:值与类型参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. null 和 undefined 跟其他假值的比较
  3. value == null 的使用场景和边界
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑