在 JavaScript 中,判斷一個變量是否未聲明(未定義)需要特別注意,因為直接訪問未聲明的變量會拋出 ReferenceError
錯誤。
最安全的方式是使用 typeof
操作符,因為它對未聲明的變量操作時不會報錯,而是返回 'undefined'
:
// 檢測變量是否未聲明
if (typeof someVariable === 'undefined') {console.log('變量 someVariable 未聲明,或已聲明但未賦值');
}
需要注意的是,這種方式無法區分「完全未聲明的變量」和「已聲明但未賦值的變量」,因為這兩種情況 typeof
都會返回 'undefined'
。
如果需要嚴格區分「未聲明」和「已聲明但未賦值」,可以結合 try...catch
語句:
function isVariableUndeclared(variableName) {try {// 嘗試訪問變量,如果未聲明會拋出 ReferenceErroreval(variableName);// 如果執行到這里,說明變量已聲明(即使未賦值)return false;} catch (e) {// 檢查錯誤類型是否為 ReferenceErrorreturn e instanceof ReferenceError;}
}// 測試
console.log(isVariableUndeclared('undeclaredVar')); // true(未聲明)let declaredVar;
console.log(isVariableUndeclared('declaredVar')); // false(已聲明但未賦值)
總結:
- 簡單場景下,
typeof variable === 'undefined'
是最常用的檢測方式 - 嚴格區分未聲明和已聲明未賦值時,需要使用
try...catch
配合變量訪問操作 - 直接使用
if (someVariable)
或if (window.someVariable)
檢測未聲明變量會報錯(非全局變量時)