ESLint 推薦的rules收集

筆者花了一個下午的時間把 ESLint 推薦的 rules 進行了總結。把官網rules打勾的部分寫成了 MD 文檔,並把每一個 rules 裏面的說明和示例也搞出來放一塊兒了。在這裏把它貢獻出來。javascript

博客維護在github上,歡迎給一個star!!!java

我的小站 => huangmiantong.cn

no-compare-neg-zero

禁止與 -0 進行比較node

Rule Detailsgit

 該規則對試圖與 -0 進行比較的代碼發出警告,由於並不會達到預期。也就是說像 x === -0 的代碼對於 +0 和 -0 都有效。做者可能想要用 Object.is(x, -0)。es6

錯誤 代碼示例:github

if (x === -0) {
    // doSomething()...
}
複製代碼

正確 代碼示例:正則表達式

if (x === 0) {
    //a doSomething()...
}
複製代碼
if (Object.is(x, -0)) {
    // doSomething()...
}
複製代碼

no-cond-assign

禁止條件表達式中出現賦值操做符express

Rule Detailsjson

 該規則禁止在 if、for、while 和 do...while 語句中出現模棱兩可的賦值操做符。數組

options

該規則有一個字符串選項:

  • "except-parens" (默認) 容許條件語句中出現賦值操做符,前提是它們被圓括號括起來 (例如,在 while 或 do...while 循環條件中,容許賦值給一個變量)
  • "always" 禁止條件語句中出現賦值語句

默認選項 "except-parens" 的 錯誤 代碼示例:

/*eslint no-cond-assign: "error"*/

// Unintentional assignment
var x;
if (x = 0) {
    var b = 1;
}

// Practical example that is similar to an error
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}
複製代碼

默認選項 "except-parens" 的 正確 代碼示例:

/*eslint no-cond-assign: "error"*/

// Assignment replaced by comparison
var x;
if (x === 0) {
    var b = 1;
}

// Practical example that wraps the assignment in parentheses
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}
複製代碼

選項 "always" 的 錯誤 代碼示例:

/*eslint no-cond-assign: ["error", "always"]*/

// Unintentional assignment
var x;
if (x = 0) {
    var b = 1;
}

// Practical example that is similar to an error
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while (someNode = someNode.parentNode);
}

// Practical example that wraps the assignment in parentheses
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode));
}

// Practical example that wraps the assignment and tests for 'null'
function setHeight(someNode) {
 "use strict";
    do {
        someNode.height = "100px";
    } while ((someNode = someNode.parentNode) !== null);
}
複製代碼

選項 "always" 的 正確 代碼示例:

/*eslint no-cond-assign: ["error", "always"]*/

// Assignment replaced by comparison
var x;
if (x === 0) {
    var b = 1;
}
複製代碼

no-console

禁用 console

Rule Details

 該規則禁止調用 console 對象的方法。

錯誤 代碼示例:

/*eslint no-console: "error"*/

console.log("Log a debug level message.");
console.warn("Log a warn level message.");
console.error("Log an error level message.");
複製代碼

正確 代碼示例:

/*eslint no-console: "error"*/

// custom console
Console.log("Hello world!");
複製代碼

options

 該規則有例外狀況,是個對象:

  • "allow" 是個字符串數組,包含容許使用的console 對象的方法

選項 { "allow": ["warn", "error"] } 的 正確 代碼示例:

/*eslint no-console: ["error", { allow: ["warn", "error"] }] */

console.warn("Log a warn level message.");
console.error("Log an error level message.");
複製代碼

When Not To Use It

 若是你在使用 Node.js,而後,console 主要用來向用戶輸出信息,因此不是嚴格用於調試目的。若是你正在作 Node.js 開發,那麼你極可能不想啓用此規則。

 另外一個可能不使用此規則的狀況是,若是你想執行控制檯調用,而不是控制檯重寫。例如:

/*eslint no-console: ["error", { allow: ["warn"] }] */
console.error = function (message) {
  throw new Error(message);
};
複製代碼

 在上面使用 no-console 規則的示例中,ESLint 將報告一個錯誤。對於上面的例子,你能夠禁用該規則:

// eslint-disable-next-line no-console
console.error = function (message) {
  throw new Error(message);
};

// or

console.error = function (message) {  // eslint-disable-line no-console
  throw new Error(message);
};
複製代碼

 然而,你可能不但願手動添加 eslint-disable-next-line 或 eslint-disable-line。你可使用 no-restricted-syntax 規則來實現控制檯調用僅接收錯誤的效果:

{
    "rules": {
        "no-restricted-syntax": [
            "error",
            {
                "selector": "CallExpression[callee.object.name='console'][callee.property.name=/^(log|warn|error|info|trace)$/]",
                "message": "Unexpected property on console object was called"
            }
        ]
    }
}
複製代碼

no-constant-condition

禁止在條件中使用常量表達式

Rule Details

 該規則禁止在如下語句的條件中出現常量表達式:

  • if、for、while 或 do...while 語句
  • ?: 三元表達式

錯誤 代碼示例:

/*eslint no-constant-condition: "error"*/

if (false) {
    doSomethingUnfinished();
}

if (void x) {
    doSomethingUnfinished();
}

for (;-2;) {
    doSomethingForever();
}

while (typeof x) {
    doSomethingForever();
}

do {
    doSomethingForever();
} while (x = -1);

var result = 0 ? a : b;
複製代碼

正確 代碼示例:

/*eslint no-constant-condition: "error"*/

if (x === 0) {
    doSomething();
}

for (;;) {
    doSomethingForever();
}

while (typeof x === "undefined") {
    doSomething();
}

do {
    doSomething();
} while (x);

var result = x !== 0 ? a : b;
複製代碼

options

checkLoops

 默認爲 true。設置該選項爲 false 容許在循環中使用常量表達式。

當 checkLoops 爲 false 時的 正確 代碼示例:

/*eslint no-constant-condition: ["error", { "checkLoops": false }]*/

while (true) {
    doSomething();
    if (condition()) {
        break;
    }
};

for (;true;) {
    doSomething();
    if (condition()) {
        break;
    }
};

do {
    doSomething();
    if (condition()) {
        break;
    }
} while (true)
複製代碼

no-control-regex

禁止在正則表達式中使用控制字符

Rule Details

 該規則禁止在正則表達式中出現控制字符。

錯誤 代碼示例:

/*eslint no-control-regex: "error"*/

var pattern1 = /\x1f/;
var pattern2 = new RegExp("\x1f");
複製代碼

正確 代碼示例:

/*eslint no-control-regex: "error"*/

var pattern1 = /\x20/;
var pattern2 = new RegExp("\x20");
複製代碼

When Not To Use It

 若是你須要使用控制字符進行模式匹配,你應該關閉該規則。

no-debugger

禁用 debugger

Rule Details

 該規則禁止 debugger 語句。

錯誤 代碼示例:

/*eslint no-debugger: "error"*/

function isTruthy(x) {
    debugger;
    return Boolean(x);
}
複製代碼

正確 代碼示例:

/*eslint no-debugger: "error"*/

function isTruthy(x) {
    return Boolean(x); // set a breakpoint at this line
}
複製代碼

When Not To Use It

 若是你的代碼在很大程度上仍處於開發階段,不想擔憂剝離 debugger 語句,那麼就關閉此規則。一般在部署測試代碼以前,你會想從新開啓此規則。

no-dupe-args

禁止 function 定義中出現重名參數

Rule Details

 該規則禁止在函數定義或表達中出現重名參數。該規則並不適用於箭頭函數或類方法,由於解析器會報告這樣的錯誤。

 若是 ESLint 在嚴格模式下解析代碼,解析器(不是該規則)將報告這樣的錯誤。

錯誤 代碼示例:

/*eslint no-dupe-args: "error"*/

function foo(a, b, a) {
    console.log("value of the second a:", a);
}

var bar = function (a, b, a) {
    console.log("value of the second a:", a);
};
複製代碼

正確 代碼示例:

/*eslint no-dupe-args: "error"*/

function foo(a, b, c) {
    console.log(a, b, c);
}

var bar = function (a, b, c) {
    console.log(a, b, c);
};
複製代碼

no-dupe-keys

禁止對象字面量中出現重複的 key

Rule Details

 該規則禁止在對象字面量中出現重複的鍵。

錯誤 代碼示例:

/*eslint no-dupe-keys: "error"*/

var foo = {
    bar: "baz",
    bar: "qux"
};

var foo = {
    "bar": "baz",
    bar: "qux"
};

var foo = {
    0x1: "baz",
    1: "qux"
};
複製代碼

正確 代碼示例:

/*eslint no-dupe-keys: "error"*/

var foo = {
    bar: "baz",
    quxx: "qux"
};
複製代碼

no-duplicate-case

禁止出現重複的 case 標籤

Rule Details

 該規則禁止在 switch 語句中的 case 子句中出現重複的測試表達式。

錯誤 代碼示例:

/*eslint no-duplicate-case: "error"*/

var a = 1,
    one = 1;

switch (a) {
    case 1:
        break;
    case 2:
        break;
    case 1:         // duplicate test expression
        break;
    default:
        break;
}

switch (a) {
    case one:
        break;
    case 2:
        break;
    case one:         // duplicate test expression
        break;
    default:
        break;
}

switch (a) {
    case "1":
        break;
    case "2":
        break;
    case "1":         // duplicate test expression
        break;
    default:
        break;
}
複製代碼

正確 代碼示例:

/*eslint no-duplicate-case: "error"*/

var a = 1,
    one = 1;

switch (a) {
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    default:
        break;
}

switch (a) {
    case one:
        break;
    case 2:
        break;
    case 3:
        break;
    default:
        break;
}

switch (a) {
    case "1":
        break;
    case "2":
        break;
    case "3":
        break;
    default:
        break;
}
複製代碼

no-empty

禁止出現空語句塊

Rule Details

 該規則禁止空語句塊出現。該規則忽略包含一個註釋的語句塊(例如,在 try 語句中,一個空的 catch 或 finally 語句塊意味着程序應該繼續執行,不管是否出現錯誤)。

錯誤 代碼示例:

/*eslint no-empty: "error"*/

if (foo) {
}

while (foo) {
}

switch(foo) {
}

try {
    doSomething();
} catch(ex) {

} finally {

}
複製代碼

正確 代碼示例:

/*eslint no-empty: "error"*/

if (foo) {
    // empty
}

while (foo) {
    /* empty */
}

try {
    doSomething();
} catch (ex) {
    // continue regardless of error
}

try {
    doSomething();
} finally {
    /* continue regardless of error */
}
複製代碼

Options

 該規則有例外狀況,是個對象:

  • "allowEmptyCatch": true 容許出現空的 catch 子句 (也就是說,不包含註釋)

allowEmptyCatch

選項 { "allowEmptyCatch": true } 的 正確 代碼示例:

/* eslint no-empty: ["error", { "allowEmptyCatch": true }] */
try {
    doSomething();
} catch (ex) {}

try {
    doSomething();
}
catch (ex) {}
finally {
    /* continue regardless of error */
}
複製代碼

When Not To Use It

 若是你打算使用空語句塊,那麼你能夠禁用此規則。

no-empty-character-class

禁止在正則表達式中使用空字符集

Rule Details

 該規則禁止在正則表達式中出現空字符集。

錯誤 代碼示例:

/*eslint no-empty-character-class: "error"*/

/^abc[]/.test("abcdefg"); // false
"abcdefg".match(/^abc[]/); // null
複製代碼

正確 代碼示例:

/*eslint no-empty-character-class: "error"*/

/^abc/.test("abcdefg"); // true
"abcdefg".match(/^abc/); // ["abc"]

/^abc[a-z]/.test("abcdefg"); // true
"abcdefg".match(/^abc[a-z]/); // ["abcd"]
複製代碼

Known Limitations

 該規則不會報告 RegExp 構造函數的字符串參數中空字符集的使用狀況。

當該規則報告了正確代碼時,漏報的示例:

/*eslint no-empty-character-class: "error"*/

var abcNeverMatches = new RegExp("^abc[]");
複製代碼

no-ex-assign

禁止對 catch 子句的參數從新賦值

Rule Details

 該規則禁止對 catch 子句中的異常從新賦值。

錯誤 代碼示例:

/*eslint no-ex-assign: "error"*/

try {
    // code
} catch (e) {
    e = 10;
}
複製代碼

正確 代碼示例:

/*eslint no-ex-assign: "error"*/

try {
    // code
} catch (e) {
    var foo = 10;
}
複製代碼

Further Reading

no-extra-boolean-cast

禁止沒必要要的布爾轉換

Rule Details

 該規則禁止沒必要要的布爾類型轉換。

錯誤 代碼示例:

/*eslint no-extra-boolean-cast: "error"*/

var foo = !!!bar;

var foo = !!bar ? baz : bat;

var foo = Boolean(!!bar);

var foo = new Boolean(!!bar);

if (!!foo) {
    // ...
}

if (Boolean(foo)) {
    // ...
}

while (!!foo) {
    // ...
}

do {
    // ...
} while (Boolean(foo));

for (; !!foo; ) {
    // ...
}
複製代碼

正確 代碼示例:

/*eslint no-extra-boolean-cast: "error"*/

var foo = !!bar;
var foo = Boolean(bar);

function foo() {
    return !!bar;
}

var foo = bar ? !!baz : !!bat;
複製代碼

no-extra-semi

禁止沒必要要的分號

Rule Details

該規則禁用沒必要要的分號。

錯誤 代碼示例:

/*eslint no-extra-semi: "error"*/

var x = 5;;

function foo() {
    // code
};

複製代碼

正確 代碼示例:

/*eslint no-extra-semi: "error"*/

var x = 5;

var foo = function() {
    // code
};

複製代碼

When Not To Use It

若是你有意使用額外的分號,那麼你能夠禁用此規則。

no-func-assign

禁止對 function 聲明從新賦值

Rule Details

該規則禁止對 function 聲明從新賦值。

錯誤 代碼示例:

/*eslint no-func-assign: "error"*/

function foo() {}
foo = bar;

function foo() {
    foo = bar;
}
複製代碼

與 JSHint 中對應的規則不一樣,該規則的 錯誤 代碼示例:

/*eslint no-func-assign: "error"*/

foo = bar;
function foo() {}
複製代碼

正確 代碼示例:

/*eslint no-func-assign: "error"*/

var foo = function () {}
foo = bar;

function foo(foo) { // `foo` is shadowed.
    foo = bar;
}

function foo() {
    var foo = bar;  // `foo` is shadowed.
}
複製代碼

no-inner-declarations

禁止在嵌套的塊中出現變量聲明或 function 聲明

Rule Details

該規則要求函數聲明和變量聲明(可選的)在程序或函數體的頂部。

Options

該規則有一個字符串選項:

  • "functions" (默認) 禁止 function 聲明出如今嵌套的語句塊中
  • "both" 禁止 function 和 var 聲明出如今嵌套的語句塊中

functions

默認選項 "functions" 的 錯誤 代碼示例:

/*eslint no-inner-declarations: "error"*/

if (test) {
    function doSomething() { }
}

function doSomethingElse() {
    if (test) {
        function doAnotherThing() { }
    }
}
複製代碼

默認選項 "functions" 的 正確 代碼示例:

/*eslint no-inner-declarations: "error"*/

function doSomething() { }

function doSomethingElse() {
    function doAnotherThing() { }
}

if (test) {
    asyncCall(id, function (err, data) { });
}

var fn;
if (test) {
    fn = function fnExpression() { };
}
複製代碼

both

選項 "both" 的 錯誤 代碼示例:

/*eslint no-inner-declarations: ["error", "both"]*/

if (test) {
    var foo = 42;
}

function doAnotherThing() {
    if (test) {
        var bar = 81;
    }
}

複製代碼

選項 "both" 的 正確 代碼示例:

/*eslint no-inner-declarations: "error"*/
/*eslint-env es6*/

var bar = 42;

if (test) {
    let baz = 43;
}

function doAnotherThing() {
    var baz = 81;
}
複製代碼

When Not To Use It

block-scoped functions 出如今 ES6 中時,函數聲明的部分規則將被廢棄,但在那以前,它應該是行之有效的。當使用 block-scoped-var 規則時或者在嵌套塊中聲明變量是能夠接受的(儘管有變量聲明提高)時候,能夠再也不檢測變量聲明。

no-invalid-regexp

禁止 RegExp 構造函數中存在無效的正則表達式字符串

Rule Details

該規則禁止在 RegExp 構造函數中出現無效的正則表達式。

錯誤 代碼示例:

/*eslint no-invalid-regexp: "error"*/

RegExp('[')

RegExp('.', 'z')

new RegExp('\\')
複製代碼

正確 代碼示例:

/*eslint no-invalid-regexp: "error"*/

RegExp('.')

new RegExp

this.RegExp('[')
複製代碼

Environments

ECMAScript 6 爲 RegExp 構造函數增長了如下標誌參數:

  • "u" (unicode)
  • "y" (sticky) 你能夠在你的 ESLint 配置 中經過設置 ECMAScript 爲 6 ,來使這些標誌被有效地識別。

若是你想容許使用額外的標誌,也不論出於什麼目的,你能夠在 .eslintrc 使用 allowConstructorFlags 選項指定它們。這樣,不論是否有 ecmaVersion 設置,這些標記將會被該規則忽略。

Options

該規則有例外狀況,是個對象:

  • "allowConstructorFlags" 是個標誌的數組

allowConstructorFlags

選項 { "allowConstructorFlags": ["u", "y"] } 的 正確 代碼示例:

/*eslint no-invalid-regexp: ["error", { "allowConstructorFlags": ["u", "y"] }]*/

new RegExp('.', 'y')

new RegExp('.', 'yu')

複製代碼

Further Reading

no-irregular-whitespace

禁止在字符串和註釋以外不規則的空白

Rule Details

該規則旨在捕獲無效的不是正常的tab和空格的空白。這些字符有的會在現代瀏覽器中引起問題,其它的會引發調試問題。

該規則禁止出現如下字符,除非該規則選項容許:

\u000B - Line Tabulation (\v) - <VT>
\u000C - Form Feed (\f) - <FF>
\u00A0 - No-Break Space - <NBSP>
\u0085 - Next Line
\u1680 - Ogham Space Mark
\u180E - Mongolian Vowel Separator - <MVS>
\ufeff - Zero Width No-Break Space - <BOM>
\u2000 - En Quad
\u2001 - Em Quad
\u2002 - En Space - <ENSP>
\u2003 - Em Space - <EMSP>
\u2004 - Tree-Per-Em
\u2005 - Four-Per-Em
\u2006 - Six-Per-Em
\u2007 - Figure Space
\u2008 - Punctuation Space - <PUNCSP>
\u2009 - Thin Space
\u200A - Hair Space
\u200B - Zero Width Space - <ZWSP>
\u2028 - Line Separator
\u2029 - Paragraph Separator
\u202F - Narrow No-Break Space
\u205f - Medium Mathematical Space
\u3000 - Ideographic Space
複製代碼

Options

該規則有例外狀況,是個對象:

  • "skipStrings": true (默認) 容許在字符串字面量中出現任何空白字符
  • "skipComments": true 容許在註釋中出現任何空白字符
  • "skipRegExps": true 容許在正則表達式中出現任何空白字符
  • "skipTemplates": true 容許在模板字面量中出現任何空白字符

skipStrings

默認選項 { "skipStrings": true } 的 錯誤 代碼示例:

/*eslint no-irregular-whitespace: "error"*/

function thing() /*<NBSP>*/{
    return 'test';
}

function thing( /*<NBSP>*/){
    return 'test';
}

function thing /*<NBSP>*/(){
    return 'test';
}

function thing᠎/*<MVS>*/(){
    return 'test';
}

function thing() {
    return 'test'; /*<ENSP>*/
}

function thing() {
    return 'test'; /*<NBSP>*/
}

function thing() {
    // Description <NBSP>: some descriptive text
}

/* Description <NBSP>: some descriptive text */

function thing() {
    return / <NBSP>regexp/;
}

/*eslint-env es6*/
function thing() {
    return `template <NBSP>string`;
}
複製代碼

默認選項 { "skipStrings": true } 正確 代碼示例:

/*eslint no-irregular-whitespace: "error"*/

function thing() {
    return ' <NBSP>thing';
}

function thing() {
    return '​<ZWSP>thing';
}

function thing() {
    return 'th <NBSP>ing';
}
複製代碼

skipComments

選項 { "skipComments": true } 的 正確 代碼示例:

/*eslint no-irregular-whitespace: ["error", { "skipComments": true }]*/

function thing() {
    // Description <NBSP>: some descriptive text
}

/* Description <NBSP>: some descriptive text */
複製代碼

skipRegExps

選項 { "skipRegExps": true } 的 正確 代碼示例:

/*eslint no-irregular-whitespace: ["error", { "skipRegExps": true }]*/

function thing() {
    return / <NBSP>regexp/;
}
複製代碼

skipTemplates

選項 { "skipTemplates": true } 的 正確 代碼示例:

/*eslint no-irregular-whitespace: ["error", { "skipTemplates": true }]*/
/*eslint-env es6*/

function thing() {
    return `template <NBSP>string`;
}
複製代碼

When Not To Use It

若是你想在你的應用中使用 tab 和空格以外的空白字符,能夠關閉此規則。

no-obj-calls

禁止把全局對象做爲函數調用

Rule Details

該規則禁止將 Math、JSON 和 Reflect 對象看成函數進行調用。

錯誤 代碼示例:

/*eslint no-obj-calls: "error"*/

var math = Math();
var json = JSON();
var reflect = Reflect();
複製代碼

正確 代碼示例:

/*eslint no-obj-calls: "error"*/

function area(r) {
    return Math.PI * r * r;
}
var object = JSON.parse("{}");
var value = Reflect.get({ x: 1, y: 2 }, "x");
複製代碼

no-regex-spaces

禁止正則表達式字面量中出現多個空格

Rule Details

該規則禁止在正則表達式字面量中出現多個空格。

錯誤 代碼示例:

/*eslint no-regex-spaces: "error"*/

var re = /foo bar/;
var re = new RegExp("foo bar");
複製代碼

正確 代碼示例:

/*eslint no-regex-spaces: "error"*/

var re = /foo {3}bar/;
var re = new RegExp("foo {3}bar");
複製代碼

no-sparse-arrays

禁用稀疏數組

Rule Details

該規則禁止使用稀疏數組,也就是逗號以前沒有任何元素的數組。該規則不適用於緊隨最後一個元素的拖尾逗號的狀況。

錯誤 代碼示例:

/*eslint no-sparse-arrays: "error"*/

var items = [,];
var colors = [ "red",, "blue" ];
複製代碼

正確 代碼示例:

/*eslint no-sparse-arrays: "error"*/

var items = [];
var items = new Array(23);

// trailing comma (after the last element) is not a problem
var colors = [ "red", "blue", ];
複製代碼

no-unexpected-multiline

禁止出現使人困惑的多行表達式

Rule Details

該規則禁止使用使人困惑的多行表達式。

錯誤 代碼示例:

/*eslint no-unexpected-multiline: "error"*/

var foo = bar
(1 || 2).baz();

var hello = 'world'
[1, 2, 3].forEach(addNumber);

let x = function() {}
`hello`

let x = function() {}
x
`hello`

let x = foo
/regex/g.test(bar)
複製代碼

正確 代碼示例:

/*eslint no-unexpected-multiline: "error"*/

var foo = bar;
(1 || 2).baz();

var foo = bar
;(1 || 2).baz()

var hello = 'world';
[1, 2, 3].forEach(addNumber);

var hello = 'world'
void [1, 2, 3].forEach(addNumber);

let x = function() {};
`hello`

let tag = function() {}
tag `hello`
複製代碼

no-unreachable

禁止在return、throw、continue 和 break 語句以後出現不可達代碼

Rule Details

該規則禁止在 return、throw、continue 和 break 語句後出現不可達代碼。

錯誤 代碼示例:

/*eslint no-unreachable: "error"*/

function foo() {
    return true;
    console.log("done");
}

function bar() {
    throw new Error("Oops!");
    console.log("done");
}

while(value) {
    break;
    console.log("done");
}

throw new Error("Oops!");
console.log("done");

function baz() {
    if (Math.random() < 0.5) {
        return;
    } else {
        throw new Error();
    }
    console.log("done");
}

for (;;) {}
console.log("done");
複製代碼

正確 代碼示例,由於 JavaScript 函數和變量提高:

/*eslint no-unreachable: "error"*/

function foo() {
    return bar();
    function bar() {
        return 1;
    }
}

function bar() {
    return x;
    var x;
}

switch (foo) {
    case 1:
        break;
        var x;
}
複製代碼

no-unsafe-finally

禁止在 finally 語句塊中出現控制流語句

Rule Details

該規則禁止在 finally 語句塊中出現 return、throw、break 和 continue 語句。它容許間接使用,好比在 function 或 class 的定義中。

錯誤 代碼示例:

/*eslint no-unsafe-finally: "error"*/
let foo = function() {
    try {
        return 1;
    } catch(err) {
        return 2;
    } finally {
        return 3;
    }
};
複製代碼
/*eslint no-unsafe-finally: "error"*/
let foo = function() {
    try {
        return 1;
    } catch(err) {
        return 2;
    } finally {
        throw new Error;
    }
};
複製代碼

正確 代碼示例:

/*eslint no-unsafe-finally: "error"*/
let foo = function() {
    try {
        return 1;
    } catch(err) {
        return 2;
    } finally {
        console.log("hola!");
    }
};
複製代碼
/*eslint no-unsafe-finally: "error"*/
let foo = function() {
    try {
        return 1;
    } catch(err) {
        return 2;
    } finally {
        let a = function() {
            return "hola!";
        }
    }
};
複製代碼
/*eslint no-unsafe-finally: "error"*/
let foo = function(a) {
    try {
        return 1;
    } catch(err) {
        return 2;
    } finally {
        switch(a) {
            case 1: {
                console.log("hola!")
                break;
            }
        }
    }
};
複製代碼

no-unsafe-negation

禁止對關係運算符的左操做數使用否認操做符

Rule Details

該規則禁止對關係運算符的左操做數使用否認操做符。

關係運算符有:

  • in 運算符.
  • instanceof 運算符.

錯誤 代碼示例:

/*eslint no-unsafe-negation: "error"*/

if (!key in object) {
    // operator precedence makes it equivalent to (!key) in object
    // and type conversion makes it equivalent to (key ? "false" : "true") in object
}

if (!obj instanceof Ctor) {
    // operator precedence makes it equivalent to (!obj) instanceof Ctor
    // and it equivalent to always false since boolean values are not objects.
}
複製代碼

正確 代碼示例:

/*eslint no-unsafe-negation: "error"*/

if (!(key in object)) {
    // key is not in object
}

if (!(obj instanceof Ctor)) {
    // obj is not an instance of Ctor
}

if(("" + !key) in object) {
    // make operator precedence and type conversion explicit
    // in a rare situation when that is the intended meaning
}
複製代碼

Options 無。

use-isnan

該規則禁止與 ‘NaN’ 的比較。

Rule Details

該規則禁止在正則表達式字面量中出現多個空格。

錯誤 代碼示例:

/*eslint use-isnan: "error"*/

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

if (foo != NaN) {
    // ...
}
複製代碼

正確 代碼示例:

/*eslint use-isnan: "error"*/

if (isNaN(foo)) {
    // ...
}

if (!isNaN(foo)) {
    // ...
}
複製代碼

valid-typeof

強制 typeof 表達式與有效的字符串進行比較

Rule Details

該規則強制 typeof 表達式與有效的字符串進行比較。

Options

該規則有一個對象選項:

  • "requireStringLiterals": true 要求 typeof 表達式只與字符串字面量或其它 typeof 表達式 進行比較,禁止與其它值進行比較。

錯誤 代碼示例:

/*eslint valid-typeof: "error"*/

typeof foo === "strnig"
typeof foo == "undefimed"
typeof bar != "nunber"
typeof bar !== "function"
複製代碼

正確 代碼示例:

/*eslint valid-typeof: "error"*/

typeof foo === "string"
typeof bar == "undefined"
typeof foo === baz
typeof bar === typeof qux
複製代碼

選項 { "requireStringLiterals": true } 的 錯誤 代碼示例:

typeof foo === undefined
typeof bar == Object
typeof baz === "strnig"
typeof qux === "some invalid type"
typeof baz === anotherVariable
typeof foo == 5
複製代碼

選項 { "requireStringLiterals": true } 的 正確 代碼示例:

typeof foo === "undefined"
typeof bar == "object"
typeof baz === "string"
typeof bar === typeof qux
複製代碼

no-case-declarations

不容許在 case 子句中使用詞法聲明

Rule Details

該規則旨在避免訪問未經初始化的詞法綁定以及跨 case 語句訪問被提高的函數。

錯誤 代碼示例:

/*eslint no-case-declarations: "error"*/
/*eslint-env es6*/

switch (foo) {
    case 1:
        let x = 1;
        break;
    case 2:
        const y = 2;
        break;
    case 3:
        function f() {}
        break;
    default:
        class C {}
}
複製代碼

正確 代碼示例:

/*eslint no-case-declarations: "error"*/
/*eslint-env es6*/

// Declarations outside switch-statements are valid
const a = 0;

switch (foo) {
    // The following case clauses are wrapped into blocks using brackets
    case 1: {
        let x = 1;
        break;
    }
    case 2: {
        const y = 2;
        break;
    }
    case 3: {
        function f() {}
        break;
    }
    case 4:
        // Declarations using var without brackets are valid due to function-scope hoisting
        var z = 4;
        break;
    default: {
        class C {}
    }
}
複製代碼

no-empty-pattern

禁止使用空解構模式

Rule Details

此規則目的在於標記出在解構對象和數組中的任何的空模式,每當遇到一個這樣的空模式,該規則就會報告一個問題。

錯誤 代碼示例:

/*eslint no-empty-pattern: "error"*/

var {} = foo;
var [] = foo;
var {a: {}} = foo;
var {a: []} = foo;
function foo({}) {}
function foo([]) {}
function foo({a: {}}) {}
function foo({a: []}) {}
複製代碼

正確 代碼示例:

/*eslint no-empty-pattern: "error"*/

var {a = {}} = foo;
var {a = []} = foo;
function foo({a = {}}) {}
function foo({a = []}) {}
複製代碼

no-fallthrough

禁止 case 語句落空

Rule Details

該規則旨在消除非故意 case 落空行爲。所以,它會標記處沒有使用註釋標明的落空狀況。

錯誤 代碼示例:

/*eslint no-fallthrough: "error"*/

switch(foo) {
    case 1:
        doSomething();

    case 2:
        doSomething();
}
複製代碼

正確 代碼示例:

/*eslint no-fallthrough: "error"*/

switch(foo) {
    case 1:
        doSomething();
        break;

    case 2:
        doSomething();
}

function bar(foo) {
    switch(foo) {
        case 1:
            doSomething();
            return;

        case 2:
            doSomething();
    }
}

switch(foo) {
    case 1:
        doSomething();
        throw new Error("Boo!");

    case 2:
        doSomething();
}

switch(foo) {
    case 1:
    case 2:
        doSomething();
}

switch(foo) {
    case 1:
        doSomething();
        // falls through

    case 2:
        doSomething();
}
複製代碼

注意,在上面的例子中,最後的 case 語句,不會引發警告,由於沒有可落空的語句了。

Options

該規則接受單個選項參數:

  • 設置 commentPattern 選項爲一個正則表達式字符串,來改變對有意爲之的落空註釋的檢索

commentPattern

選項 { "commentPattern": "break[\s\w]*omitted" } 的 正確 代碼示例:

/*eslint no-fallthrough: ["error", { "commentPattern": "break[\\s\\w]*omitted" }]*/

switch(foo) {
    case 1:
        doSomething();
        // break omitted

    case 2:
        doSomething();
}

switch(foo) {
    case 1:
        doSomething();
        // caution: break is omitted intentionally

    default:
        doSomething();
}
複製代碼

no-global-assign

禁止對原生對象或只讀的全局對象進行賦值

Rule Details

該規則禁止修改只讀的全局變量。

ESLint 能夠配置全局變量爲只讀。

  • Specifying Environments
  • Specifying Globals

錯誤 代碼示例:

/*eslint no-global-assign: "error"*/

Object = null
undefined = 1
複製代碼
/*eslint no-global-assign: "error"*/
/*eslint-env browser*/

window = {}
length = 1
top = 1
複製代碼
/*eslint no-global-assign: "error"*/
/*globals a:false*/

a = 1
複製代碼

正確 代碼示例:

/*eslint no-global-assign: "error"*/

a = 1
var b = 1
b = 2
複製代碼
/*eslint no-global-assign: "error"*/
/*eslint-env browser*/

onload = function() {}
複製代碼
/*eslint no-global-assign: "error"*/
/*globals a:true*/

a = 1
複製代碼

Options

該規則接受一個 exceptions 選項,能夠用來指定容許進行賦值的內置對象列表:

{
    "rules": {
        "no-global-assign": ["error", {"exceptions": ["Object"]}]
    }
}
複製代碼

no-octal

禁用八進制字面量

Rule Details

該規則禁用八進制字面量。

若是 ESLint 是在嚴格模式下解析代碼,解析器(而不是該規則)會報告錯誤。

錯誤 代碼示例:

/*eslint no-octal: "error"*/

var num = 071;
var result = 5 + 07;
複製代碼

正確 代碼示例:

/*eslint no-octal: "error"*/

var num  = "071";
複製代碼

no-redeclare

禁止屢次聲明同一變量

Rule Details

此規則目旨在消除同一做用域中屢次聲明同一變量。

錯誤 代碼示例:

/*eslint no-redeclare: "error"*/

var a = 3;
var a = 10;
複製代碼

正確 代碼示例:

/*eslint no-redeclare: "error"*/

var a = 3;
// ...
a = 10;
複製代碼

Options

該規則有一個選項參數,是個對象,該對象有個布爾屬性爲 "builtinGlobals"。默認爲false。

若是設置爲 true,該規則也會檢查全局內建對象,好比Object、Array、Number…

builtinGlobals

"builtinGlobals" 選項將會在全局範圍檢查被從新聲明的內置全局變量。

選項 { "builtinGlobals": true } 的 錯誤 代碼示例:

/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/

var Object = 0;
複製代碼

在 browser 環境下,選項 {"builtinGlobals": true} 的 錯誤 代碼示例:

/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/
/*eslint-env browser*/

var top = 0;
複製代碼

browser 環境有不少內建的全局變量(例如,top)。一些內建的全局變量不能被從新聲明。

注意,當使用 node 或 commonjs 環境 (或 ecmaFeatures.globalReturn,若是使用默認解析器)時,則程序的最大做用域不是實際的全局做用域,而是一個模塊做用域。當出現這種狀況時,聲明一個之內置的全局變量命令的變量,不算是重聲明,只是遮蔽了全局變量。在這種狀況下,應該使用 no-shadow 規則的 "builtinGlobals" 選項。

no-self-assign

禁止自我賦值

Rule Details

該規則旨在消除自身賦值的狀況。

錯誤 代碼示例:

/*eslint no-self-assign: "error"*/

foo = foo;

[a, b] = [a, b];

[a, ...b] = [x, ...b];

({a, b} = {a, x});
複製代碼

正確 代碼示例:

/*eslint no-self-assign: "error"*/

foo = bar;
[a, b] = [b, a];

// This pattern is warned by the `no-use-before-define` rule.
let foo = foo;

// The default values have an effect.
[foo = 1] = [foo];
複製代碼

Options

該規則也有能夠檢查屬性的選項。

{
    "no-self-assign": ["error", {"props": false}]
}
複製代碼
  • props - 若是爲 true,no-self-assign 規則將對屬性的自我賦值發出警告。默認爲 false.

props

選項 { "props": true } 的 錯誤 代碼示例:

/*eslint no-self-assign: [error, {props: true}]*/

// self-assignments with properties.
obj.a = obj.a;
obj.a.b = obj.a.b;
obj["a"] = obj["a"];
obj[a] = obj[a];
複製代碼

選項 { "props": true } 的 正確 代碼示例:

/*eslint no-self-assign: [error, {props: true}]*/

// non-self-assignments with properties.
obj.a = obj.b;
obj.a.b = obj.c.b;
obj.a.b = obj.a.c;
obj[a] = obj["a"]

// This ignores if there is a function call.
obj.a().b = obj.a().b
a().b = a().b

// Known limitation: this does not support computed properties except single literal or single identifier.
obj[a + b] = obj[a + b];
obj["a" + "b"] = obj["a" + "b"];
複製代碼

no-unused-labels

禁用出現未使用過的標

Rule Details

該規則旨在消除未使用過的標籤。

錯誤 代碼示例:

/*eslint no-unused-labels: "error"*/

A: var foo = 0;

B: {
    foo();
}

C:
for (let i = 0; i < 10; ++i) {
    foo();
}
複製代碼

正確 代碼示例:

/*eslint no-unused-labels: "error"*/

A: {
    if (foo()) {
        break A;
    }
    bar();
}

B:
for (let i = 0; i < 10; ++i) {
    if (foo()) {
        break B;
    }
    bar();
}
複製代碼

no-useless-escape

禁用沒必要要的轉義字符

Rule Details

該規則標記在不改變代碼行爲的狀況下能夠安全移除的轉義。

錯誤 代碼示例:

/*eslint no-useless-escape: "error"*/

"\'";
'\"';
"\#";
"\e";
`\"`;
`\"${foo}\"`;
`\#{foo}`;
/\!/;
/\@/;
複製代碼

正確 代碼示例:

/*eslint no-useless-escape: "error"*/

"\"";
'\'';
"\x12";
"\u00a9";
"\371";
"xs\u2111";
`\``;
`\${${foo}}`;
`$\{${foo}}`;
/\\/g;
/\t/g;
/\w\$\*\^\./;
複製代碼

no-delete-var

禁用沒必要要的轉義字符

Rule Details

該規則禁止對變量使用 delete 操做符。

若是 ESLint 是在嚴格模式下解析代碼,解析器(而不是該規則)會報告錯誤。

錯誤 代碼示例:

/*eslint no-delete-var: "error"*/

var x;
delete x;
複製代碼

no-undef

禁用未聲明的變量,除非它們在 /*global */ 註釋中被提到

Rule Details

對任何未聲明的變量的引用都會引發一個警告,除非顯式地在 /global .../ 註釋中指定,或在 globals key in the configuration file 中指定。另外一個常見的用例是,你有意使用定義在其餘地方的全局變量(例如來自 HTML 的腳本)。

錯誤 代碼示例:

/*eslint no-undef: "error"*/

var a = someFunction();
b = 10;
複製代碼

有 global 聲明時,該規則的 正確 代碼示例:

/*global someFunction b:true*/
/*eslint no-undef: "error"*/

var a = someFunction();
b = 10;
複製代碼

有 global 聲明時,該規則的 錯誤 代碼示例:

/*global b*/
/*eslint no-undef: "error"*/

b = 10;
複製代碼

默認狀況下,/*global */ 中聲明的變量是隻讀的,所以對其進行賦值是錯誤的。

Options

  • typeof 設置爲 true,將對 typeof 中用到的變量發出警告(默認爲false)。

typeof

默認選項 { "typeof": false } 的 正確 代碼示例:

/*eslint no-undef: "error"*/

if (typeof UndefinedIdentifier === "undefined") {
    // do something ...
}
複製代碼

若是想阻止在 typeof 運算中有未申明的變量致使的警告,能夠用此項。

選項 { "typeof": true } 的 錯誤 代碼示例:

/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}
複製代碼

有 global 聲明時,選項 { "typeof": true } 的 正確 代碼示例:

/*global a*/
/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}
複製代碼

Environments

爲了方便,ESlint 提供了預約義流行類庫和運行時環境暴露的全局變量的快捷方式。該規則支持這些環境,如 指定 Environments 中列出的。使用以下:

browser

browser 環境下的 正確 代碼示例:

/*eslint no-undef: "error"*/
/*eslint-env browser*/

setTimeout(function() {
    alert("Hello");
});
複製代碼

Node.js

node 環境下的 正確 代碼示例:

/*eslint no-undef: "error"*/
/*eslint-env node*/

var fs = require("fs");
module.exports = function() {
    console.log(fs);
};
複製代碼

no-unused-vars

禁止出現未使用過的變量

Rule Details

此規則旨在消除未使用過的變量,方法和方法中的參數名,當發現這些存在,發出警告。

符合下面條件的變量被認爲是可使用的:

  • 做爲回調函數
  • 被讀取 (var y = x)
  • 傳入函數中做爲argument對象(doSomething(x))
  • 在傳入到另外一個函數的函數中被讀取

一個變量僅僅是被賦值爲 (var x = 5) 或者是被聲明過,則認爲它是沒被考慮使用。

錯誤 代碼示例:

/*eslint no-unused-vars: "error"*/
/*global some_unused_var*/

// It checks variables you have defined as global
some_unused_var = 42;

var x;

// Write-only variables are not considered as used.
var y = 10;
y = 5;

// A read for a modification of itself is not considered as used.
var z = 0;
z = z + 1;

// By default, unused arguments cause warnings.
(function(foo) {
    return 5;
})();

// Unused recursive functions also cause warnings.
function fact(n) {
    if (n < 2) return 1;
    return n * fact(n - 1);
}

// When a function definition destructures an array, unused entries from the array also cause warnings.
function getY([x, y]) {
    return y;
}
複製代碼

正確 代碼示例:

/*eslint no-unused-vars: "error"*/

var x = 10;
alert(x);

// foo is considered used here
myFunc(function foo() {
    // ...
}.bind(this));

(function(foo) {
    return foo;
})();

var myFunc;
myFunc = setTimeout(function() {
    // myFunc is considered used
    myFunc();
}, 50);

// Only the second argument from the descructured array is used.
function getY([, y]) {
    return y;
}
複製代碼

exported

在 CommonJS 或者 ECMAScript 模塊外部,可用 var建立一個被其餘模塊代碼引用的變量。你也能夠用 /* exported variableName */ 註釋快代表此變量已導出,所以此變量不會被認爲是未被使用過的。

須要注意的是 /* exported */ 在下列狀況下是無效的:

  • node 或 commonjs 環境
  • parserOptions.sourceType 是 module
  • ecmaFeatures.globalReturn 爲 true

行註釋 // exported variableName 將不起做用,由於 exported 不是特定於行的。

選項 /* exported variableName */ 的 正確 代碼示例:

/* exported global_var */

var global_var = 42;
複製代碼

Options

該規則接受一個字符串或者對像類型的參數。字符串設置正如同 vars 同樣(以下所示)。

配置項的默認值,變量選項是 all,參數的選項是 after-used 。

{
    "rules": {
        "no-unused-vars": ["error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }]
    }
}
複製代碼

vars

此配置項有兩個值:

  • all 檢測全部變量,包括全局環境中的變量。這是默認值。
  • local 僅僅檢測本做用域中聲明的變量是否使用,容許不使用全局環境中的變量。

vars: local

選項 { "vars": "local" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "vars": "local" }]*/
/*global some_unused_var */

some_unused_var = 42;
複製代碼

varsIgnorePattern

這個 varsIgnorePattern 選項指定了不須要檢測的異常:變量名稱匹配正則模式。例如,變量的名字包含 ignored 或者 Ignored。

選項 { "varsIgnorePattern": "[iI]gnored" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/

var firstVarIgnored = 1;
var secondVar = 2;
console.log(secondVar);
複製代碼

args

args 選項有三個值:

  • after-used - 最後一個參數必須使用。如:一個函數有兩個參數,你使用了第二個參數,ESLint 不會報警告。
  • all - 全部命名參數必須使用。
  • none - 不檢查參數。

args: after-used

選項 { "args": "after-used" } 的 錯誤 代碼示例:

/*eslint no-unused-vars: ["error", { "args": "after-used" }]*/

// 1 error
// "baz" is defined but never used
(function(foo, bar, baz) {
    return bar;
})();
複製代碼

選項 { "args": "after-used" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", {"args": "after-used"}]*/

(function(foo, bar, baz) {
    return baz;
})();
複製代碼

args: all

選項 { "args": "all" } 的 錯誤 代碼示例:

/*eslint no-unused-vars: ["error", { "args": "all" }]*/

// 2 errors
// "foo" is defined but never used
// "baz" is defined but never used
(function(foo, bar, baz) {
    return bar;
})();
複製代碼

args: none

選項 { "args": "none" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "args": "none" }]*/

(function(foo, bar, baz) {
    return bar;
})();
複製代碼

ignoreRestSiblings

ignoreRestSiblings 選項是個布爾類型 (默認: false)。使用 Rest 屬性 可能會「省略」對象中的屬性,可是默認狀況下,其兄弟屬性被標記爲 「unused」。使用該選項可使 rest 屬性的兄弟屬性被忽略。

選項 { "ignoreRestSiblings": true } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/
// 'type' is ignored because it has a rest property sibling.
var { type, ...coords } = data;
複製代碼

argsIgnorePattern

argsIgnorePattern 選項指定排除不須要檢測:這些參數的名字符合正則匹配。例如,下劃線開頭的變量。

選項 { "argsIgnorePattern": "^_" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }]*/

function foo(x, _y) {
    return x + 1;
}
foo();
複製代碼

caughtErrors

caughtErrors 選項被用來驗證 catch 塊的參數。

它有兩個設置:

  • none - 不檢查錯誤對象。這是默認設置。
  • all - 全部參數必須被使用。

caughtErrors: none 沒有指定該規則,至關於將它賦值爲 none。

選項 { "caughtErrors": "none" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "caughtErrors": "none" }]*/

try {
    //...
} catch (err) {
    console.error("errors");
}
複製代碼

caughtErrors: all

選項 { "caughtErrors": "all" } 的 錯誤 代碼示例:

/*eslint no-unused-vars: ["error", { "caughtErrors": "all" }]*/

// 1 error
// "err" is defined but never used
try {
    //...
} catch (err) {
    console.error("errors");
}
複製代碼

caughtErrorsIgnorePattern

caughtErrorsIgnorePattern 選項指定例外狀況,不會檢查匹配正則表達式 catch 參數。例如,名字以 ‘ignore’ 開頭的變量。

選項 { "caughtErrorsIgnorePattern": "^ignore" } 的 正確 代碼示例:

/*eslint no-unused-vars: ["error", { "caughtErrorsIgnorePattern": "^ignore" }]*/

try {
    //...
} catch (ignoreErr) {
    console.error("errors");
}
複製代碼

no-mixed-spaces-and-tabs

禁止空格和 tab 的混合縮進

Rule Details

該規則禁止使用 空格 和 tab 混合縮進。

錯誤 代碼示例:

/*eslint no-mixed-spaces-and-tabs: "error"*/

function add(x, y) {
// --->..return x + y;

      return x + y;
}

function main() {
// --->var x = 5,
// --->....y = 7;

    var x = 5,
        y = 7;
}
複製代碼

正確 代碼示例:

/*eslint no-mixed-spaces-and-tabs: "error"*/

function add(x, y) {
// --->return x + y;
    return x + y;
}
複製代碼

Options

該規則有一個字符串選項。

  • "smart-tabs" 當 tab 是爲了對齊,容許混合使用空格和 tab。

smart-tabs

選項 "smart-tabs" 的 正確 代碼示例:

/*eslint no-mixed-spaces-and-tabs: ["error", "smart-tabs"]*/

function main() {
// --->var x = 5,
// --->....y = 7;

    var x = 5,
        y = 7;
}
複製代碼

constructor-super

要求在構造函數中有 super() 的調用

Rule Details

該規則旨在標記無效或缺失的 super() 調用。

錯誤 代碼示例:

/*eslint constructor-super: "error"*/
/*eslint-env es6*/

class A {
    constructor() {
        super();  // This is a SyntaxError.
    }
}

class A extends B {
    constructor() { }  // Would throw a ReferenceError.
}

// Classes which inherits from a non constructor are always problems.
class A extends null {
    constructor() {
        super();  // Would throw a TypeError.
    }
}

class A extends null {
    constructor() { }  // Would throw a ReferenceError.
}
複製代碼

正確 代碼示例:

/*eslint constructor-super: "error"*/
/*eslint-env es6*/

class A {
    constructor() { }
}

class A extends B {
    constructor() {
        super();
    }
}
複製代碼

no-class-assign

禁止修改類聲明的變量

Rule Details

該規則旨在標記類聲明中變量的修改狀況。

錯誤 代碼示例:

/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

class A { }
A = 0;
複製代碼
/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

A = 0;
class A { }
複製代碼
/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

class A {
    b() {
        A = 0;
    }
}
複製代碼
/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

let A = class A {
    b() {
        A = 0;
        // `let A` is shadowed by the class name.
    }
}
複製代碼

正確 代碼示例:

/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

let A = class A { }
A = 0; // A is a variable.
複製代碼
/*eslint no-class-assign: "error"*/
/*eslint-env es6*/

let A = class {
    b() {
        A = 0; // A is a variable.
    }
}
複製代碼
/*eslint no-class-assign: 2*/
/*eslint-env es6*/

class A {
    b(A) {
        A = 0; // A is a parameter.
    }
}
複製代碼

no-const-assign

禁止修改 const 聲明的變量

Rule Details

該規則旨在標記修改用const關鍵字聲明的變量。

錯誤 代碼示例:

/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

const a = 0;
a = 1;
複製代碼
/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

const a = 0;
a += 1;
複製代碼
/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

const a = 0;
++a;
複製代碼

正確 代碼示例:

/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

const a = 0;
console.log(a);
複製代碼
/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

for (const a in [1, 2, 3]) { // `a` is re-defined (not modified) on each loop step.
    console.log(a);
}
複製代碼
/*eslint no-const-assign: "error"*/
/*eslint-env es6*/

for (const a of [1, 2, 3]) { // `a` is re-defined (not modified) on each loop step.
    console.log(a);
}
複製代碼

no-dupe-class-members

禁止類成員中出現重複的名稱

Rule Details

該規則旨在標記類成員中重複名稱的使用。

錯誤 代碼示例:

/*eslint no-dupe-class-members: "error"*/
/*eslint-env es6*/

class Foo {
  bar() { }
  bar() { }
}

class Foo {
  bar() { }
  get bar() { }
}

class Foo {
  static bar() { }
  static bar() { }
}
複製代碼

正確 代碼示例:

/*eslint no-dupe-class-members: "error"*/
/*eslint-env es6*/

class Foo {
  bar() { }
  qux() { }
}

class Foo {
  get bar() { }
  set bar(value) { }
}

class Foo {
  static bar() { }
  bar() { }
}
複製代碼

no-new-symbol

禁止 Symbolnew 操做符和 new 一塊兒使用

Rule Details

該規則旨在阻止使用 new 操做符調用 Symbol。

錯誤 代碼示例:

/*eslint no-new-symbol: "error"*/
/*eslint-env es6*/

var foo = new Symbol('foo');
複製代碼

正確 代碼示例:

/*eslint no-new-symbol: "error"*/
/*eslint-env es6*/

var foo = Symbol('foo');


// Ignores shadowed Symbol.
function bar(Symbol) {
    const baz = new Symbol("baz");
}
複製代碼

no-this-before-super

禁止在構造函數中,在調用 super() 以前使用 this 或 super

Rule Details

該規則旨在標記出在調用 super() 以前使用 this 或 super 的狀況。

錯誤 代碼示例:

/*eslint no-this-before-super: "error"*/
/*eslint-env es6*/

class A extends B {
    constructor() {
        this.a = 0;
        super();
    }
}

class A extends B {
    constructor() {
        this.foo();
        super();
    }
}

class A extends B {
    constructor() {
        super.foo();
        super();
    }
}

class A extends B {
    constructor() {
        super(this.foo());
    }
}
複製代碼

正確 代碼示例:

/*eslint no-this-before-super: "error"*/
/*eslint-env es6*/

class A {
    constructor() {
        this.a = 0; // OK, this class doesn't have an `extends` clause.
    }
}

class A extends B {
    constructor() {
        super();
        this.a = 0; // OK, this is after `super()`.
    }
}

class A extends B {
    foo() {
        this.a = 0; // OK. this is not in a constructor.
    }
}
複製代碼
相關文章
相關標籤/搜索