null 和 undefined 的区别,别再答不清了!
导语:
在前端开发面试中,基础知识往往是淘汰率最高的环节。面试官常常会抛出“null 和 undefined 有什么区别?”这样看似简单的问题,背后却隐藏着对你 JavaScript 理解深度的审视。本文将从面试实战出发,深入解析这类题目的出题逻辑、答题技巧与实战应用,助你从容应对前端技术面试!
一、面试主题概述
在 JavaScript 中,null
和 undefined
都表示“值缺失”的状态,但它们含义不同、用途不同,甚至类型也不一样。
面试官之所以常考这类问题,是因为它直接反映了候选人对 JS 基础类型、内存管理和运行机制的理解。如果连这两个基础类型的区别都模糊不清,如何应对更复杂的业务逻辑和 bug 排查?
二、高频面试题汇总
-
null
和undefined
有什么区别? - 使用
==
和===
比较null
和undefined
会得到什么结果? - 变量未赋值、函数无返回值、对象属性不存在时分别返回什么?
- 如何判断一个变量是
null
还是undefined
? - 哪些场景适合使用
null
,哪些场景适合使用undefined
?
三、重点题目详解
题目一:
null
和 undefined
有什么区别?
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 == undefined
与 null === undefined
的结果是什么?
console.log(null == undefined); // true
console.log(null === undefined); // false
详细解析:
-
==
做类型转换后,null
和undefined
被认为“相等”(这是 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
判断,因为它同时为 null
和 undefined
返回 true,容易引发歧义。
四、面试官视角与加分项
-
考察维度:
- 对 JS 基本类型的掌握。
- 能否清晰解释语言底层行为(如 typeof null 的 bug)。
- 是否了解面试陷阱(如 == 的隐式转换)。
-
加分项:
- 能补充
undefined
是全局对象的属性(可被重写),而void 0
是一种更安全的写法。 - 能从项目实战中举例说明使用
null
表示“明确的空”,如初始化接口响应字段。
- 能补充
示例:
// 项目接口中常见用法
const user = {
name: '张三',
avatar: null, // 明确表示“暂无头像”
email: undefined // 该字段未从后端返回
};
五、总结与建议
-
undefined
表示“未定义”,null
表示“空值”,理解它们的语义才是根本。 - 面试时不要只给定义,要结合类型、比较、实际用途展开,给面试官一个“这人确实会用”的印象。
- 多通过写代码来加深理解,比如用
console.log
打印变量状态,构造一些实际场景。
最后一句话送给你:
面试不是死记硬背,而是“用你熟悉的语言去解释常见的问题”,当你能把 null
和 undefined
讲成故事,你就赢了。