JavaScript中是否存在“null coalescing”运算符?

Javascript中有一个空合并运算符吗?

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

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

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

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

这是不舒服的恕我直言。 我可以做得更好吗?


C#空合并运算符( ?? )的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!');
链接地址: http://www.djcxy.com/p/2015.html

上一篇: Is there a "null coalescing" operator in JavaScript?

下一篇: Iterator invalidation rules