版本

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-assignno-shadow-restricted-names 規則來防止 undefined 被遮蔽或賦予不同的值。這可以確保 undefined 始終保持其原始的預期值。

規則詳情

此規則旨在消除 undefined 的使用,因此,只要使用它就會產生警告。

此規則的不正確程式碼範例

在遊樂場中開啟
/*eslint no-undefined: "error"*/

var foo = undefined;

var undefined = "foo";

if (foo === undefined) {
    // ...
}

function baz(undefined) {
    // ...
}

bar(undefined, "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 中引入。

延伸閱讀

資源

變更語言