我需要做类似于bar = (foo == null) ? null : foo.bar
Node.js中是否有 Null Propagation Operator (?.
)?如果不是,这是否是新版本的提案?
[编辑]为了增加更多清晰度,我想在访问foo.bar
时(当未定义foo
时)避免使用NPE,而表达式应该返回null
。
答案 0 :(得分:1)
根据以下评论进行更新:
如果foo为falsey(null,undefined,false,空字符串等),则下面的代码将计算为foo的值,如果foo不为false,则为foo.bar。像||操作员,&& operator也返回它最后评估的内容。如果foo是假的,那么它将中止评估并返回foo的值。如果foo不是假的,那么它将继续并评估foo.bar并返回任何内容。
foo && foo.bar
原始答案:
您可以使用或运算符,||
在Javascript中完成此操作或运算符不一定要求为布尔值。它返回它评估真实性的最后一个参数。
因此,基于您的示例,以下代码将foo设置为等于foo.bar。
foo = null || foo.bar
以下将foo与foo.bar进行比较(我不确定代码中的double = s是否是故意的。如果是故意的,那么请考虑使用triple = s)
foo === (null || foo.bar)
此概念经常用于设置默认值。例如,带有选项参数的函数可能会执行类似的操作。
options.start = options.start || 0;
options.color = options.color || "red";
options.length = options.length || 10;
小心一件事。在上面代码的最后一行中,如果options.length为0,那么它将设置为10,因为0的计算结果为false。在那种情况下,您可能希望以“老式”的方式做事:
options.length = options.length === undefined ? 10 : options.length;
答案 1 :(得分:0)
const bar = foo && foo.bar;
这称为Short-circuit evaluation,其中仅在第一部分为truthy value时才评估第二部分(&&之后的部分)。