Spider's null-coalescing运算符??
如果左表达式为空或未定义,则返回正确的表达式。Null-Coalescing运算符(??)如何在Spider中工作?
var name = options.name ?? "default name";
它是如何工作的?
Spider's null-coalescing运算符??
如果左表达式为空或未定义,则返回正确的表达式。Null-Coalescing运算符(??)如何在Spider中工作?
var name = options.name ?? "default name";
它是如何工作的?
空合并运算符通常使用简单的条件表达式。例如,该代码在蜘蛛:
var name = options.name ?? "default name";
编译成以下JavaScript:
var name = options.name == null ? "default name" : options.name;
(more about equals equals null)
未定义的标识符问题
注意,如果左侧表达式是一个标识符,并且该标识符是未定义的,那么JS解释器会引发错误。为了解决这个问题,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编译器将调用表达式移到一个不同的变量中。比如这段代码中蜘蛛:
var name = getName() ?? "default name";
被编译成这样的:
var tmp = getName();
var name = tmp == null ? "default name" : tmp;
声明问题
如果空合并运算符用作陈述,而不是作为一个表达,例如:
a() ?? b();
Spider编译器使用if语句代替条件表达式:
if (a() == null) {
b();
}