
no-undefined
禁止使用 undefined
作為識別符
JavaScript 中的 undefined
變數實際上是全域物件的一個屬性。因此,在 ECMAScript 3 中,有可能覆寫 undefined
的值。雖然 ECMAScript 5 禁止覆寫 undefined
,但仍然可以遮蔽 undefined
,例如
function doSomething(data) {
var 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
的使用,因此,只要使用它就會產生警告。
此規則的不正確程式碼範例
在遊樂場中開啟
/*eslint no-undefined: "error"*/
var foo = ;
var = "foo";
if (foo === ) {
// ...
}
function baz() {
// ...
}
bar(, "lorem");
此規則的正確程式碼範例
在遊樂場中開啟
/*eslint no-undefined: "error"*/
var foo = void 0;
var Undefined = "foo";
if (typeof foo === "undefined") {
// ...
}
global.undefined = "foo";
bar(void 0, "lorem");
何時不該使用它
如果您想允許在程式碼中使用 undefined
,那麼您可以安全地關閉此規則。
相關規則
版本
此規則在 ESLint v0.7.1 中引入。
延伸閱讀
