Javascript 中是否有空合并运算符?
例如,在 C#中,我可以这样做:
String someString = null;
var whatIWant = someString ?? "Cookies!";
我可以为 Javascript 找出的最佳近似值是使用条件运算符:
var someString = null;
var whatIWant = someString ? someString : 'Cookies!';
这有点 ick 嘿恕我直言。我可以做得更好吗?
C#null 合并运算符( ??
)的 JavaScript 等价物使用逻辑 OR( ||
):
var whatIWant = someString || "Cookies!";
有些情况(下面说明)表明行为与 C#的行为不匹配,但这是在 JavaScript 中分配默认 / 替代值的一般,简洁的方法。
无论第一个操作数的类型如何,如果将其转换为布尔结果为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"
function coalesce() {
var len = arguments.length;
for (var i=0; i<len; i++) {
if (arguments[i] !== null && arguments[i] !== undefined) {
return arguments[i];
}
}
return null;
}
var xyz = {};
xyz.val = coalesce(null, undefined, xyz.val, 5);
// xyz.val now contains 5
此解决方案的工作方式类似于 SQL coalesce 函数,它接受任意数量的参数,如果它们都没有值,则返回 null。它的行为就像 C#?? 运算符,“”,false 和 0 被认为是 NOT NULL,因此计为实际值。如果你来自. net 背景,这将是最自然的感觉解决方案。
如果||
作为 C#的替代??
在你的情况下不够好,因为它吞下空字符串和零,你总是可以编写自己的函数:
function $N(value, ifnull) {
if (value === null || value === undefined)
return ifnull;
return value;
}
var whatIWant = $N(someString, 'Cookies!');