Null-Coalescing运算符(??)如何在Spider中运行?

时间:2014-11-22 15:41:51

标签: javascript null-coalescing-operator spiderlang

Spider's如果左表达式为null或未定义,则null-coalescing运算符??将返回正确的表达式。

var name = options.name ?? "default name";

它是如何运作的?

1 个答案:

答案 0 :(得分:5)

null-coalescing运算符通常使用简单的条件表达式。例如,Spider中的这段代码:

var name = options.name ?? "default name";

编译为以下JavaScript:

var name = options.name == null ? "default name" : options.name;

(more about equals equals null)

未定义的标识符问题

请注意,如果左表达式是标识符,并且该标识符未定义,则JS解释器将引发错误。为了解决这个问题,Spider编译器添加了一个未定义的检查。例如Spider中的这段代码:

var name = name ?? "value";

编译JS中的以下代码:

var name = typeof name === "undefined" || name == null ? "value" : name;

请注意,如果您想执行options.name ?? "default"之类的操作并且您不确定是否定义了options,则可以使用空传播运算符:

var name = options?.name ?? "default";

双重功能调用问题

如果左表达式是一个调用表达式(例如fn()),那么它可能会被调用两次 - 第一次进行空测试,第二次进行值调用。为了解决这个问题,Spider编译器将调用表达式移动到另一个变量。例如Spider中的这段代码:

var name = getName() ?? "default name";

被编译成类似的东西:

var tmp = getName();
var name = tmp == null ? "default name" : tmp;

声明问题

如果将null-coalescing运算符用作语句而不是表达式,例如:

a() ?? b();

然后Spider编译器使用if语句而不是条件表达式:

if (a() == null) {
  b();
}