Node.js中的Null Propagation运算符

时间:2018-02-08 10:49:21

标签: node.js null

我需要做类似于bar = (foo == null) ? null : foo.bar

的事情

Node.js中是否有 Null Propagation Operator ?.)?如果不是,这是否是新版本的提案?

[编辑]为了增加更多清晰度,我想在访问foo.bar时(当未定义foo时)避免使用NPE,而表达式应该返回null

2 个答案:

答案 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时才评估第二部分(&&之后的部分)。