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();
}