
no-undefined
禁止使用 undefined
作為識別符
❄️ 已凍結
此規則目前為凍結狀態,不接受功能請求。
JavaScript 中的 undefined
變數實際上是全域物件的屬性。因此,在 ECMAScript 3 中,有可能覆寫 undefined
的值。雖然 ECMAScript 5 不允許覆寫 undefined
,但仍然有可能遮蔽 undefined
,例如:
function doSomething(data) {
const undefined = "hi";
// doesn't do what you think it does
if (data === undefined) {
// ...
}
}
因為 undefined
可以被覆寫或遮蔽,讀取 undefined
可能會給出意想不到的值。(null
則不然,它是一個總是產生相同值的關鍵字。)為了防止這種情況,您可以避免所有 undefined
的使用,這是一些風格指南推薦的做法,也是此規則強制執行的。這些風格指南也建議:
- 應該為
undefined
的變數只需保持未初始化。(所有未初始化的變數在 JavaScript 中都會自動獲得undefined
的值。) - 檢查值是否為
undefined
應該使用typeof
。 - 必要時,使用
void
運算子產生undefined
的值。
作為替代方案,您可以使用 no-global-assign 和 no-shadow-restricted-names 規則來防止 undefined
被遮蔽或賦予不同的值。這確保了 undefined
將始終保持其原始、預期的值。
規則詳細資訊
此規則旨在消除 undefined
的使用,因此,每當使用它時都會產生警告。
此規則的錯誤程式碼範例
在 Playground 中開啟
/*eslint no-undefined: "error"*/
const foo = ;
const = "foo";
if (foo === ) {
// ...
}
function baz() {
// ...
}
bar(, "lorem");
此規則的正確程式碼範例
在 Playground 中開啟
/*eslint no-undefined: "error"*/
const foo = void 0;
const Undefined = "foo";
if (typeof foo === "undefined") {
// ...
}
global.undefined = "foo";
bar(void 0, "lorem");
何時不該使用
如果您想允許在程式碼中使用 undefined
,那麼您可以安全地關閉此規則。
相關規則
版本
此規則在 ESLint v0.7.1 中引入。
延伸閱讀
