如何在 TypeScript 中檢查變數是否被定義?
在 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
中,才會用到這方法。