JavaScript中空字符串、null和undefined的检查:完整指南

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

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

开始课程

引言:为什么这个任务比看起来简单



每个写过JavaScript的开发者都遇到过需要检查字符串是否为空,或者它可能是null或undefined的情况。看起来,这能有多难?但老实说:你写过多少次if (str == ""),然后当变量是null时遇到了bug?又有多少次你试图在undefined上调用.trim(),然后在控制台中看到了红色错误?



这个话题是Stack Overflow上最热门的问题之一,有数万次浏览。这并非没有原因。在JavaScript中有很多细微差别,将简单的检查变成了雷区。在本文中,我们将分析所有可能的方法,从最显而易见到最专业的,并找出在你的项目中最好使用哪一种。



我们将讨论什么是falsy值,==和===运算符如何工作,以及为什么""和0与false不同。到文章结束时,你将确切知道如何编写一个不会出错的通用检查。



问题:什么被认为是“空”字符串?



在编写代码之前,我们需要明确定义我们在检查什么。在“How do I check for an empty/undefined/null string in JavaScript?”这个问题的上下文中,我们通常指的是三种状态:



  • 空字符串 ("" 或 '') — 长度为零的字符串。
  • null — 有意缺失的值。
  • undefined — 变量已声明但未初始化。


但还有第四种隐含情况:仅由空格组成的字符串 (" ")。从业务逻辑的角度来看,它通常也被认为是“空”的。我们将分析所有情况。



方法1:逻辑转换(最简单)



最流行且简洁的方法是使用JavaScript在布尔上下文中自动将值转换为true或false这一事实。



let str = "";

if (!str) { console.log("字符串为空、null或undefined");} else { console.log("字符串不为空");}


这段代码适用于""、null、undefined、0、NaN和false。为什么?因为所有这些值在JavaScript中都被认为是falsy。如果你确定变量是一个字符串(或者可能是null/undefined),那么这种方法就足够了。



但有一个陷阱:如果变量等于0(数字),那么检查也会说“空”。如果这很关键,那么这种方法就不合适。



方法2:严格比较(显式控制)



如果你想尽可能精确,只检查上述三种状态,请使用严格比较 (===)。



function isEmptyOrNull(str) {    return str === "" || str === null || str === undefined;}

console.log(isEmptyOrNull("")); // trueconsole.log(isEmptyOrNull(null)); // trueconsole.log(isEmptyOrNull(undefined)); // trueconsole.log(isEmptyOrNull("hello")); // falseconsole.log(isEmptyOrNull(0)); // false (数字不会通过)


这段代码运行起来没有意外。它不会将0或false与空字符串混淆。但它不处理仅包含空格的字符串。



方法3:Trim + 检查(针对“真正的”空值)



用户经常在表单中输入空格,而字符串" "在视觉上看起来是空的。为了也捕获这些情况,我们需要使用.trim()方法修剪空格。



function isBlank(str) {    return !str || str.trim() === "";}

console

博客

书籍推荐