新增的运算符 __ 如何去用?

52 阅读2分钟

??是什么? 是一个新添加的空值合并运算符 如何去用?

a ?? b 的结果是?

如果 a 是已定义的,结果是 a
如果 a 不是已定义的,结果是 b

a ?? b 也可以写成这样
let result = (a !== null && a !== undefined) ? a : b

解决了什么? ?? 的常见使用场景是提供默认值 在这里 user 的值不为 null/undefined 则显示user ,反之显示匿名

let user;

alert(user ?? "匿名"); // 匿名(user 未定义)

假设我们在变量 firstName、lastName 或 nickName 中存储着一个用户的数据。如果用户决定不填写相应的值,则所有这些变量的值都可能是未定义的。 我们想使用这些变量之一显示用户名,如果这些变量的值都是 null/undefined,则显示 “匿名”。 让我们使用 ?? 运算符来实现这一需求:

let firstName = null;
let lastName = null;
let nickName = "Supercoder";

// 显示第一个已定义的值:
alert(firstName ?? lastName ?? nickName ?? "匿名"); 

与 || 来对比 在上面的代码中,用 || 进行替代结果也不变。你可能有疑问,那 ?? 是来干什么的? 他们之间的重要区别是

  • || 返回的是一个
  • ?? 返回的是一个已定义的

换句话说,|| 无法区分 false、0、空字符串 "" 和 null/undefined。它们都一样 —— 假值(falsy values)。如果其中任何一个是 || 的第一个参数,那么我们将得到第二个参数作为结果。 不过在实际中,我们可能只想在变量的值为 null/undefined 时使用默认值。 例如,考虑下面这种情况:

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0

0 在这里是有效值,它不应该被替换成默认值。所以 ?? 得到的是正确结果