null 和 undefined 的区别,别再答不清了!

导语:
在前端开发面试中,基础知识往往是淘汰率最高的环节。面试官常常会抛出“null 和 undefined 有什么区别?”这样看似简单的问题,背后却隐藏着对你 JavaScript 理解深度的审视。本文将从面试实战出发,深入解析这类题目的出题逻辑、答题技巧与实战应用,助你从容应对前端技术面试!


一、面试主题概述

在 JavaScript 中,nullundefined 都表示“值缺失”的状态,但它们含义不同、用途不同,甚至类型也不一样。

面试官之所以常考这类问题,是因为它直接反映了候选人对 JS 基础类型、内存管理和运行机制的理解。如果连这两个基础类型的区别都模糊不清,如何应对更复杂的业务逻辑和 bug 排查?


二、高频面试题汇总

  1. nullundefined 有什么区别?
  2. 使用 ===== 比较 nullundefined 会得到什么结果?
  3. 变量未赋值、函数无返回值、对象属性不存在时分别返回什么?
  4. 如何判断一个变量是 null 还是 undefined
  5. 哪些场景适合使用 null,哪些场景适合使用 undefined

三、重点题目详解

题目一:
nullundefined 有什么区别?

let a;
let b = null;

console.log(a);           // undefined
console.log(b);           // null
console.log(typeof a);    // "undefined"
console.log(typeof b);    // "object"(历史遗留 bug)

详细解析:

对比项 undefined null
含义 表示变量已声明但尚未赋值 表示变量已赋值,但值是“空值”
类型(typeof) "undefined" "object"(历史遗留行为)
使用场景 系统默认赋值,如函数未返回、变量未赋值 程序员主动赋值,表示“空对象”
是否为 falsy

面试官思路:
这一题考察的是对基本数据类型的理解与语言设计底层机制。如果候选人能提及 typeof null === "object" 是一个历史遗留 bug,就能加分不少。

答题建议:
用表格类比法清晰回答,并结合应用场景说明,例如函数返回空结果时使用 null,避免只停留在“一个是系统赋值,一个是手动赋值”的层面。


题目二:
null == undefinednull === undefined 的结果是什么?

console.log(null == undefined);  // true
console.log(null === undefined); // false

详细解析:

  • == 做类型转换后,nullundefined 被认为“相等”(这是 JS 的宽松等于号规则)。
  • === 要求类型和值都相等,因此结果为 false

面试官思路:
这是对“== 与 === 的区别”的典型考题,能引申出类型转换规则、类型判断误区等话题。

答题建议:
直接给出结果后,补充 ES 标准中对 == 特殊规则的解释(只有 null == undefined 是 true,其他类型比较都不相等),体现你的知识广度。


题目三:
如何判断变量是 null 还是 undefined

let x;
let y = null;

console.log(typeof x); // "undefined"
console.log(typeof y); // "object"

console.log(x === undefined); // true
console.log(y === null);      // true

详细解析:

判断方式:

  • typeof x === "undefined":判断是否未定义。
  • x === undefined:更严格判断(变量必须已声明)。
  • x === null:判断是否主动赋值为空。

更严谨方式(避免未定义变量报错):

typeof someVar === "undefined"

扩展建议:

避免直接使用 == null 判断,因为它同时为 nullundefined 返回 true,容易引发歧义。


四、面试官视角与加分项

  • 考察维度:

    • 对 JS 基本类型的掌握。
    • 能否清晰解释语言底层行为(如 typeof null 的 bug)。
    • 是否了解面试陷阱(如 == 的隐式转换)。
  • 加分项:

    • 能补充 undefined 是全局对象的属性(可被重写),而 void 0 是一种更安全的写法。
    • 能从项目实战中举例说明使用 null 表示“明确的空”,如初始化接口响应字段。

示例:

// 项目接口中常见用法
const user = {
  name: '张三',
  avatar: null, // 明确表示“暂无头像”
  email: undefined // 该字段未从后端返回
};

五、总结与建议

  • undefined 表示“未定义”,null 表示“空值”,理解它们的语义才是根本。
  • 面试时不要只给定义,要结合类型、比较、实际用途展开,给面试官一个“这人确实会用”的印象。
  • 多通过写代码来加深理解,比如用 console.log 打印变量状态,构造一些实际场景。

最后一句话送给你:
面试不是死记硬背,而是“用你熟悉的语言去解释常见的问题”,当你能把 nullundefined 讲成故事,你就赢了。