返回

双问号(??)运算符:JS中的一剂良药

前端

双问号(??)运算符:JavaScript 的万能解药

在 JavaScript 的浩瀚世界中,空值可谓无处不在,处理它们一直是开发者面临的棘手难题。传统上,我们依赖冗长的 if-else 语句来检查和处理空值,但这种方法既繁琐又容易出错。

Introducing the Double Question Mark: A Lifeline for Null and Undefined

幸运的是,JavaScript 为我们提供了双问号(??)运算符,一个强大的工具,专门用于简化和优雅地处理空值。

?? 运算符的奥秘

双问号运算符接收三个操作数:

  1. 要检查的值: 这是你要确定是否为 null 或 undefined 的变量。
  2. 如果值为 null 或 undefined 返回的值: 这是当你检查的值为空时返回的备用值。
  3. 如果值不为 null 或 undefined 返回的值: 这是当你检查的值不为空时返回的值。

例如:

let x = null;
let y = x ?? "未知";

console.log(y); // 输出:"未知"

在上面的代码中,我们首先检查 x 是否为 null 或 undefined。由于 x 为 null,?? 运算符返回备用值 "未知"。

灵活的连锁反应

?? 运算符不限于检查单个值。它可以轻松处理多个值的检查,形成一个连锁反应。

例如:

let x = null;
let y = undefined;
let z = x ?? y ?? "未知";

console.log(z); // 输出:"未知"

在这个例子中,我们检查了 x 和 y 是否都为 null 或 undefined。由于 x 和 y 都是空的,?? 运算符返回了备用值 "未知"。

优先级和括号

?? 运算符的优先级低于逻辑 OR(||)和逻辑 AND(&&)运算符。因此,如果您将 ?? 与 || 或 && 结合使用,则需要为逻辑 || 或 && 添加括号。

例如:

let x = null;
let y = undefined;
let z = (x ?? "未知") || (y ?? "未知");

console.log(z); // 输出:"未知"

万能的解决方案:?? 运算符的用途

除了空值检查,?? 运算符还可以在各种场景中大放异彩:

赋值: 将备用值分配给变量。

例如:

let x = y ?? "未知";

表达式: 计算空值的备用值。

例如:

let sum = x ?? 0 + y ?? 0;

操作符: 检查值是否为空并返回布尔值。

例如:

let isNull = x ?? null;

结论:告别空值难题

通过双问号(??)运算符,我们获得了处理空值的利器。它简化了我们的代码,消除了 if-else 语句的冗余,并防止了由空值引起的错误和意外结果。

常见问题解答

  1. ?? 运算符与 || 运算符有什么区别?
    ?? 运算符专门用于空值检查,而 || 运算符用于任何非假值(包括空字符串和 0)。

  2. 我可以在 ?? 运算符中使用多个备用值吗?
    不行,?? 运算符只能返回一个备用值。

  3. ?? 运算符可以与其他运算符结合使用吗?
    是的,但请注意 ?? 运算符的优先级。

  4. ?? 运算符可以嵌套使用吗?
    是的,但嵌套层级过多可能会降低可读性。

  5. ?? 运算符在哪些情况下最有用?
    在处理表单输入、API 响应和任何可能包含空值的场景中,?? 运算符非常有用。