在 TypeScript 變數的狀態可以相當多變,它們可能已經被定義或者還未定義,可能已經初始化或者尚未初始化。當我們需要確定一個變數的確切狀態時。通常情況下,我們可能會傾向於使用 typeof 運算符來檢查變數的類型,但這在某些情況下可能不夠用。

舉個例子,當我們嘗試檢查像 vendor.test 這樣的屬性時,僅僅使用 typeof 是不夠的。如果 vendor 尚未被定義,那麼這樣的檢查將會拋出一個引用錯誤(Reference Error),因為 typeof 並不能捕捉到未定義對象的屬性訪問。

一個更可靠的方法是使用 try...catch 語句。這種方法允許我們安全地嘗試訪明一個表達式,並在出現錯誤時進行捕捉和處理。透過這種方式,我們可以有效地檢測像 vendor.test 這樣的屬性是否存在,而不用擔心因為變數未定義而導致的程序崩潰。

用法如下:

try {
	// 不是 undefined 傳回 1
    typeof vendor != 'undefined' ? 1 : 0
	// 變數未定義會丟出 ReferenceError
} catch(e) {
    0
}

try 區塊中,首先使用 typeof 運算符檢查 vendor 是否為 undefined。如果 vendor 已經被定義,則表達式的結果為 1。然而,如果 vendor 未被定義,嘗試訪問它將會拋出一個 ReferenceError。這時,控制流會轉入 catch 塊,並將表達式的結果設為 0

我有點忘了,我是在什麼狀況下需要。記得似乎是要檢查 bundled 的 javascript 有沒有載入到全域物件 global 中,才會用到這方法。