一尘不染

JavaScript 中是否有“空值合并”运算符?

javascript

Javascript中是否有空合并运算符?

例如,在 C# 中,我可以这样做:

String someString = null;
var whatIWant = someString ?? "Cookies!";

我可以为 Javascript 找出的最佳近似值是使用条件运算符:

var someString = null;
var whatIWant = someString ? someString : 'Cookies!';

恕我直言,这有点恶心。我能做得更好吗?


阅读 150

收藏
2022-02-23

共1个答案

一尘不染

更新

JavaScript 现在支持空值合并运算符 (??)。当其左侧操作数为nullor时返回其右侧操作数undefined,否则返回其左侧操作数。

旧答案

请在使用前检查兼容性。


C# null 合并运算符 ( ??) 的 JavaScript 等效项使用逻辑 OR ( ||):

var whatIWant = someString || "Cookies!";

在某些情况下(下文说明)该行为与 C# 的行为不匹配,但这是在 JavaScript 中分配默认/替代值的一般、简洁的方式。


澄清

无论第一个操作数的类型如何,如果将其转换为 Boolean 会导致false,则赋值将使用第二个操作数。请注意以下所有情况:

alert(Boolean(null)); // false
alert(Boolean(undefined)); // false
alert(Boolean(0)); // false
alert(Boolean("")); // false
alert(Boolean("false")); // true -- gotcha! :)

这意味着:

var whatIWant = null || new ShinyObject(); // is a new shiny object
var whatIWant = undefined || "well defined"; // is "well defined"
var whatIWant = 0 || 42; // is 42
var whatIWant = "" || "a million bucks"; // is "a million bucks"
var whatIWant = "false" || "no way"; // is "false"
2022-02-23