返回

null 运算符:赋予你代码语义的超级英雄

前端

JavaScript 中的 null 运算符(??)是赋值运算符的一个近亲,但它有着独特的魔力。它可以简化代码、提高可读性,还可以让你的代码语义更加明确。

null 运算符的作用

null 运算符的作用是,如果其左边的操作数为 null 或 undefined,则返回其右边的操作数。否则,返回其左边的操作数。

例如,以下代码:

const name = null ?? 'John Doe';

将把变量 name 赋值为 "John Doe"。这是因为 null 运算符的左边操作数是 null,所以它返回其右边操作数 "John Doe"。

null 运算符的运算优先级

null 运算符的运算优先级与赋值运算符相同,都是最低的。这意味着,它会在所有其他运算符之后执行。

例如,以下代码:

const result = 1 + 2 ?? 3;

将把变量 result 赋值为 3。这是因为加号的运算优先级高于 null 运算符,所以先执行加法运算,得到 3。然后,再执行 null 运算符,由于其左边操作数不是 null 或 undefined,所以返回其左边的操作数 3。

null 运算符的短路求值特性

null 运算符还具有短路求值特性。这意味着,如果其左边的操作数为 null 或 undefined,则其右边的操作数不会被执行。

例如,以下代码:

const name = null ?? getName();

function getName() {
  throw new Error('getName() was called!');
}

不会抛出错误。这是因为 null 运算符的左边操作数是 null,所以它返回其右边操作数。由于其右边操作数没有被执行,所以 getName() 函数也不会被调用,也就不会抛出错误。

如何使用 null 运算符

null 运算符可以用来简化代码、提高可读性,还可以让你的代码语义更加明确。

例如,以下代码:

if (name === null || name === undefined) {
  name = 'John Doe';
}

可以简化为:

const name = null ?? 'John Doe';

这两种代码的作用都是一样的,但后一种代码更加简洁、可读,而且语义更加明确。

你还可以使用 null 运算符来避免使用三元运算符。例如,以下代码:

const result = age >= 18 ? 'adult' : 'minor';

可以简化为:

const result = age >= 18 ?? 'minor';

这两种代码的作用也是一样的,但后一种代码更加简洁、可读,而且语义更加明确。

注意:

  • null 运算符只能用于赋值运算。
  • null 运算符不能用于比较运算。
  • null 运算符不能用于逻辑运算。