JavaScript 中 null、undefined 和空值检查:完整指南

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

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

开始课程

为什么检查 null、undefined 和空值是每个 JavaScript 开发者的痛点?

\n\n

你是否曾经有过这样的想法:“为什么我又要写这个冗长的 if (x !== null && x !== undefined && x !== '') 结构?”如果是这样,你并不孤单。Stack Overflow 上的问题 “Is there a standard function to check for null, undefined, or blank variables in JavaScript?” 已经获得了数千次浏览。这并非偶然。

\n\n

JavaScript 没有 内置 函数可以一次性检查所有情况。但这并不意味着我们注定要受苦。在本文中,我们将探讨为什么没有这样的函数,如何优雅地绕过这个限制,并编写我们自己的理想辅助函数。

\n\n

准备好将混乱的检查转变为干净、清晰的代码了吗?我们开始吧!

\n\n

JavaScript 中的 null、undefined 和 blank(空字符串)是什么?

\n\n

在寻找“灵丹妙药”之前,让我们先弄清楚我们面对的是什么。这三个概念是三种不同的东西,混淆它们是很危险的。

\n\n
    \n
  • undefined — 变量已声明,但未赋值。这是 JavaScript 的“默认值”。
  • \n
  • null — 变量存在,但被有意赋值为“无”。这是开发者的有意识选择。
  • \n
  • blank(空字符串) — '' 或 ""。字符串存在,但没有字符。
  • \n
\n\n

关键区别:null 是一个对象(是的,这是 JS 的历史性 bug,现在成了特性),undefined 是一种特殊类型,而空字符串是一个字符串。

\n\n
let a; // undefined\nlet b = null; // null\nlet c = ''; // 空字符串 (blank)\nconsole.log(typeof a); // "undefined"\nconsole.log(typeof b); // "object" (是的,就是这样!)\nconsole.log(typeof c); // "string"
\n\n

现在想象一下:你想检查一个变量在任何意义上是否为“空”。普通的 if (!value) 检查适用于 null 和 undefined,但 不会考虑 空字符串吗?不,它会考虑!因为空字符串是一个 falsy 值。但有一个陷阱...

\n\n

为什么简单的 if (!value) 是个坏主意?

\n\n

是的,if (!value) 会捕获 null、undefined、''、0、false 和 NaN。但如果 0 或 false 是你的变量的 有效 值呢?例如,如果你检查购物车中的商品数量,0 是正常的,而不是“空”。

\n\n
function processOrder(itemCount) {\n    if (!itemCount) {\n        console.log('错误:没有商品!');\n    } else {\n        console.log('正在处理订单...');\n    }\n}\nprocessOrder(0); // 错误:没有商品! — 这不是错误,这是 0 件商品
\n\n

这就是为什么我们需要一个 专门的 函数,而不是通用的“真值”检查。

\n\n

标准函数?不,但有标准模式

\n\n

对于问题“Is there a standard function?”,答案是 没有。但 JavaScript 提供了灵活的工具,让你可以编写自己的函数。这甚至更好,因为你的函数将完全符合你的业务需求。

\n\n

方案 1:最简单的检查(严格)

\n\n

如果你只需要检查 null 和 undefined — 使用 严格比较 (===)。这是最安全的方式。

\n\n
function isNullOrUndefined(value) {\n    return value === null || value === undefined;\n}\n\nconsole.log(isNullOrUndefined(null)); // true\nconsole.log(isNullOrUndefined(undefined)); // true\nconsole.log(isNullOrUndefined('')); // false\nconsole.log(isNullOrUndefined(0)); // false
\n\n

优点:不会将 0 和空字符串与“无”混淆。缺点:不检查空

博客

书籍推荐