JavaScript中的undefined或null:如何在2025年检查变量

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“变量未定义”:为什么这个问题困扰着所有人?

\n\n

如果你曾经写过JavaScript代码,你一定遇到过这种情况:运行代码,控制台中出现红色提示 Uncaught TypeError: Cannot read properties of undefined。或者更糟——null is not an object。熟悉吗?这是最常见的一种错误,困扰着各个级别的开发者。

\n\n

“How can I determine if a variable is 'undefined' or 'null'?”这个问题在Stack Overflow上获得了数千次浏览和数百个回答。这并非偶然:在JavaScript中,这两个值看起来很相似,但行为却不同。在2025年,当代码变得更加复杂、项目规模更大时,正确检查 undefined 和 null 的能力已从“最好知道”变成了“必须掌握”。

\n\n

在本文中,我们将解析所有检查方法,从简单到高级,并展示在现代开发中应该使用哪些方法。开始吧!

\n\n

undefined vs null:有什么区别?

\n\n

在开始检查之前,让我们先弄清楚我们面对的是什么。在JavaScript中,undefined 和 null 是两个不同的原始值,各自拥有自己的类型。

\n\n

undefined

\n

undefined 是当你声明了一个变量但没有赋值时,自动分配给该变量的值。同样,如果一个函数没有显式的 return 语句,它会返回 undefined。

\n\n
let myVar;\nconsole.log(myVar); // undefined\n\nfunction doNothing() {}\nconsole.log(doNothing()); // undefined\n\nconsole.log(someNonExistentVariable); // ReferenceError,但如果访问对象的属性:\nconst obj = {};\nconsole.log(obj.prop); // undefined\n
\n\n

null

\n

null 是开发者有意分配的值。它表示“空”、“无”、“值不存在”。从 typeof 的角度来看,null 是一个对象(是的,这是一个历史遗留的bug,但它已经成为了一种特性)。

\n\n
let myVar = null;\nconsole.log(myVar); // null\nconsole.log(typeof myVar); // "object" — 是的,就是这样!\n
\n\n

主要区别:undefined 是“尚未赋值”,而 null 是“有意为空”。但在非严格比较下,它们是相等的:

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

正是由于这种非严格相等性导致了混淆。因此,2025年的最佳实践建议使用严格比较(===)。

\n\n

检查undefined和null的5种最佳方法

\n\n

让我们解析所有流行的方法,从最简单到最现代。我们将根据三个标准对每种方法进行评估:可读性、可靠性和性能。

\n\n

1. 严格比较(===)——黄金标准

\n

最直接、最清晰的方法是通过 === 将变量直接与 undefined 或 null 进行比较。

\n\n
let value = null;\n\n// 检查是否为null\nif (value === null) {\n    console.log('这是null');\n}\n\n// 检查是否为undefined\nif (value === undefined) {\n    console.log('这是undefined');\n}\n\n// 检查是否为null 或 undefined(分别检查)\nif (value === null || value === undefined) {\n    console.log('值不存在');\n}\n
\n\n

为什么这是最佳实践?

\n
    \n
  • 可读性最高——任何开发者都能理解你在检查什么。
  • \n
  • 没有意外的类型转换。
  • \n
  • 适用于所有JavaScript版本,包括最旧的版本。
  • \n
\n\n

缺点:如果需要同时检查两个值,必须编写两个条件。但这可以通过像上面示例中的 || 运算符来解决。

\n\n

2. 空值合并运算符(??)——已被广泛采用的新特性

\n

从ES2020开始,JavaScript引入了 ?? 运算符(nu

博客

书籍推荐