规范
JavaScript 是一个动态的弱类型语言,在开发中比较容易出错。因为没有编译程序,为了寻找 JavaScript 代码错误通常需要在执行过程中不断调试。像 ESLint 这样的可以让程序员在编码的过程中发现问题而不是在执行的过程中。
通过注释忽略ESLint
# 代码块注释
/* eslint-disable */
// code...
/* eslint-enable */
# 行代码注释
// code... // eslint-disable-line
⚠️ 建议开启ESLint
刚刚接触es-lint可能会引起极度不适,但在这个过程中可以慢慢规范你的代码。当程序报错时,如果是ESLint错误,复制报错的信息,在此表或.eslintrc.js中查找,了解你的代码问题,并按照规则修改它。
ESLint配置表
Rules | Description ( ❌ no use ) |
---|---|
accessor-pairs | 设置了 setter ,必须相应设置 getter ,反之不必须 |
array-bracket-newline | ❌ 数组方括号前后的换行符使用规则 |
array-bracket-spacing | ❌ 数组方括号前后的空格使用规则 |
array-callback-return | 数组的 map、filter、sort 等方法,回调函数必须有返回值 |
array-element-newline | ❌ 每个数组项是否独占一行 |
arrow-body-style | ❌ 箭头函数的书写规则 |
arrow-parens | ❌ 箭头函数的圆括号使用规则 |
arrow-spacing | ❌ 箭头函数的空格使用规则 |
block-scoped-var | 不能在块外使用块作用域内 var 定义的变量 |
block-spacing | ❌ 代码块花括号前后的空格规则 |
brace-style | ❌ if else 的花括号换行规则 |
callback-return | ❌ callback 之后必须立即 return |
camelcase | ❌ 变量名必须使用驼峰式 |
capitalized-comments | ❌ 注释的首字母应该大写 |
class-methods-use-this | class 的非静态方法必须包含 this 关键字 |
comma-dangle | ❌ 对象的最后一项后面是否写逗号 |
comma-spacing | ❌ 逗号前后是否有空格 |
comma-style | ❌ 逗号写在行首还是行尾 |
complexity | 禁止函数 if ... else if ... else 的复杂度超过 20 |
computed-property-spacing | ❌ 使用方括号访问对象属性时,方括号前后的空格规则 |
consistent-return | ❌ 禁止函数在不同条件下返回不同类型的值 |
consistent-this | this 的别名规则,只允许 self 或 that |
constructor-super | ❌ 构造函数中必须调用 super |
curly | if 后必须包含 { ,单行 if 除外 |
default-case | switch 语句必须包含 default |
dot-location | ❌ 链式操作时,点的位置,是在上一行结尾还是下一行开头 |
eol-last | ❌ 文件最后必须有空行 |
eqeqeq | 必须使用 === 和 !== ,和 null 对比时除外 |
for-direction | for 循环不得因方向错误造成死循环 |
func-call-spacing | 执行函数的圆括号前后的空格规则 |
func-name-matching | 把函数赋给变量或对象属性时,函数名和变量名或对象属性名必须一致 |
func-names | 不允许匿名函数 |
func-style | ❌ 必须只使用函数申明或只使用函数表达式 |
generator-star-spacing | ❌ generator 的 * 前后空格使用规则 |
getter-return | getter 必须有返回值,允许返回 undefined |
global-require | ❌ require 必须在全局作用域下 |
guard-for-in | for in 时需检测 hasOwnProperty |
handle-callback-err | callback 中的 err、error 参数和变量必须被处理 |
id-blacklist | ❌ id 黑名单 |
id-length | ❌ 变量名长度限制 |
id-match | ❌ 限制变量名必须匹配指定的正则表达式 |
indent | ❌ 缩进使用 tab 还是空格 |
init-declarations | ❌ 变量必须在定义的时候赋值 |
jsx-quotes | jsx 语法中,属性的值必须使用双引号 |
key-spacing | ❌ 对象字面量冒号前后的空格使用规则 |
keyword-spacing | 关键字前后必须有空格 |
linebreak-style | ❌ 换行符使用规则 |
line-comment-position | ❌ 单行注释必须写在前一行还是行尾 |
lines-around-comment | ❌ 注释前后是否要空一行 |
max-depth | 最大块嵌套深度为 5 层 |
max-len | ❌ 限制单行代码的长度 |
max-lines | ❌ 限制单个文件最大行数 |
max-nested-callbacks | 最大回调深度为 3 层 |
max-params | 函数的形参不能多于8个 |
max-statements-per-line | ❌ 限制一行中的语句数量 |
max-statements | ❌ 限制函数块中的语句数量 |
multiline-ternary | ❌ 三元表达式的换行规则 |
new-cap | new关键字后类名应首字母大写 |
capIsNew | 允许大写开头的函数直接执行 |
new-parens | new 关键字后类应包含圆括号 |
newline-per-chained-call | ❌ 链式调用是否要换行 |
no-alert | 禁止 alert,提醒开发者,上线时要去掉 |
no-array-constructor | 禁止使用 Array 构造函数,使用 Array(num) 直接创建长度为 num 的数组时可以 |
no-await-in-loop | 禁止将 await 写在循环里 |
no-bitwise | ❌ 禁止位运算 |
no-buffer-constructor | 禁止在 Node.js 中直接调用 Buffer 构造函数 |
no-caller | 禁止使用 arguments.caller 和 arguments.callee |
no-case-declarations | switch的条件中出现 var、let、const、function、class 等关键字,必须使用花括号把内容括起来 |
no-catch-shadow | catch中不得使用已定义的变量名 |
no-class-assign | class定义的类名不得与其它变量重名 |
no-compare-neg-zero | 禁止与 -0 做比较 |
no-cond-assign | 禁止在 if、for、while 中出现赋值语句,除非用圆括号括起来 |
no-confusing-arrow | 禁止出现难以理解的箭头函数,除非用圆括号括起来 |
no-console | 禁止使用 console,提醒开发者,上线时要去掉 |
no-constant-condition | 禁止使用常量作为判断条件 |
no-const-assign | 禁止对 const 定义重新赋值 |
no-continue | ❌ 禁止 continue |
no-control-regex | 禁止正则表达式中出现 Ctrl 键的 ASCII 表示,即/\x1f/ |
no-debugger | 禁止 debugger 语句,提醒开发者,上线时要去掉 |
no-delete-var | 禁止对变量使用 delete 关键字,删除对象的属性不受限制 |
no-div-regex | ❌ 禁止在正则表达式中出现形似除法操作符的开头,如 let a = /=foo/ |
no-dupe-args | 函数参数禁止重名 |
no-dupe-keys | 禁止对象出现重名键值 |
no-dupe-class-members | 类方法禁止重名 |
no-duplicate-case | 禁止 switch 中出现相同的 case |
no-duplicate-imports | 禁止重复 import |
no-else-return | ❌ 禁止出现 if (cond) { return a } else { return b },应该写为 if (cond) { return a } return b |
no-empty-character-class | 正则表达式中禁止出现空的字符集[] |
no-empty-function | 禁止空的 function |
no-empty-pattern | 禁止解构中出现空 {} 或 [] |
no-empty | 禁止出现空代码块 |
no-eq-null | ❌ 禁止 == 和 != 与 null 做比较,必须用 === 或 !== |
no-eval | 禁止使用 eval |
no-ex-assign | catch 定义的参数禁止赋值 |
no-extend-native | 禁止扩展原生对象 |
no-extra-bind | 禁止额外的 bind |
no-extra-boolean-cast | 禁止额外的布尔值转换 |
no-extra-label | 禁止额外的 label |
no-extra-parens | 禁止额外的括号,仅针对函数体 |
no-extra-semi | 禁止额外的分号 |
no-fallthrough | 每一个 switch 的 case 都需要有 break, return 或 throw 包含注释的情况下允许 |
no-floating-decimal | 不允许使用 2. 或 .5 来表示数字,需要用 2、2.0、0.5 的格式 |
no-func-assign | 禁止对函数声明重新赋值 |
no-global-assign | 禁止对全局变量赋值 |
no-implicit-coercion | 禁止使用隐式类型转换 |
no-implied-eval | 禁止在 setTimeout 和 setInterval 中传入字符串,因会触发隐式 eval |
no-implicit-globals | 禁止隐式定义全局变量 |
no-inline-comments | ❌ 禁止行内注释 |
no-inner-declarations | 禁止在块作用域内使用 var 或函数声明 |
no-invalid-regexp | 禁止使用非法的正则表达式 |
no-invalid-this | ❌ 禁止在类之外的地方使用 this |
no-irregular-whitespace | 禁止使用不规范空格 |
no-iterator | 禁止使用 iterator |
no-label-var | label 不得与已定义的变量重名 |
no-labels | ❌ 禁止使用 label |
no-lone-blocks | 禁止使用无效的块作用域 |
no-lonely-if | ❌ 禁止 else 中只有一个单独的 if |
no-loop-func | 禁止 for (var i) { function() { use i } },使用 let 则可以 |
no-magic-numbers | 禁止魔法数字 |
no-mixed-operators | 禁止使用混合的逻辑判断,必须把不同的逻辑用圆括号括起来 |
no-mixed-requires | ❌ 相同类型的 require 必须放在一起 |
no-mixed-spaces-and-tabs | 禁止混用空格和 tab 来做缩进,必须统一 |
no-multi-assign | 禁止连等赋值 |
no-multi-spaces | 禁止使用连续的空格 |
no-multi-str | 禁止使用 \ 来定义多行字符串,统一使用模板字符串来做 |
no-multiple-empty-lines | 连续空行的数量限制 |
no-negated-condition | ❌ 禁止 if 中出现否定表达式 !== |
no-nested-ternary | ❌ 禁止嵌套的三元表达式 |
no-new-func | ❌ 禁止 new Function |
no-new-object | 禁止使用 new Object |
no-new-require | 禁止使用 new require |
no-new-symbol | 禁止使用 new Symbol |
no-new-wrappers | 禁止 new Boolean、Number 或 String |
no-new | 禁止 new 一个类而不存储该实例 |
no-obj-calls | 禁止把原生对象 Math、JSON、Reflect 当函数使用 |
no-octal-escape | 禁止使用八进制转义符 |
no-octal | 禁止使用0开头的数字表示八进制 |
no-path-concat | 禁止使用 __dirname + 'file' 的形式拼接路径,应该使用 path.join 或 path.resolve 来代替 |
no-param-reassign | 禁止对函数的参数重新赋值 |
no-plusplus | ❌ 禁止 ++ 和 -- |
no-process-env | ❌ 禁止使用 process.env.NODE_ENV |
no-process-exit | ❌ 禁止使用 process.exit(0) |
no-prototype-builtins | ❌ 禁止使用 hasOwnProperty, isPrototypeOf 或 propertyIsEnumerable |
no-proto | 禁止使用 __proto__ |
no-redeclare | 禁止重复声明 |
no-regex-spaces | 禁止在正则表达式中出现连续空格 |
no-restricted-globals | ❌ 禁止特定的全局变量 |
no-restricted-imports | ❌ 禁止 import 特定的模块 |
no-restricted-modules | ❌ 禁止使用特定的模块 |
no-restricted-properties | ❌ 禁止特定的对象属性 |
no-restricted-syntax | ❌ 禁止使用特定的语法 |
no-return-assign | 禁止在return中赋值 |
no-return-await | 禁止在 return 中使用 await |
no-script-url | 禁止 location.href = 'javascript:void' |
no-self-assign | 禁止将自己赋值给自己 |
no-self-compare | 禁止自己与自己作比较 |
no-sequences | 禁止逗号操作符 |
no-shadow-restricted-names | 禁止使用保留字作为变量名 |
no-shadow | 禁止在嵌套作用域中出现重名的定义,如 let a; function b() { let a } |
no-sparse-arrays | 禁止数组中出现连续逗号 |
no-sync | ❌ 禁止使用 node 中的同步的方法,比如 fs.readFileSync |
no-tabs | ❌ 禁止使用 tabs |
no-template-curly-in-string | 禁止普通字符串中出现模板字符串语法 |
no-ternary | ❌ 禁止三元表达式 |
no-this-before-super | 禁止在构造函数的 super 之前使用 this |
no-throw-literal | 禁止 throw 字面量,必须 throw 一个 Error 对象 |
no-trailing-spaces | 禁止行尾空格 |
no-undef-init | 禁止将 undefined 赋值给变量 |
no-undef | 禁止访问未定义的变量或方法 |
no-undefined | 禁止使用 undefined,如需判断一个变量是否为 undefined,请使用 typeof a === 'undefined' |
no-underscore-dangle | ❌ 禁止变量名中使用下划线 |
no-unexpected-multiline | 禁止出现难以理解的多行代码 |
no-unmodified-loop-condition | 循环体内必须对循环条件进行修改 |
no-unneeded-ternary | 禁止不必要的三元表达式 |
no-unreachable | 禁止出现不可到达的代码,如在 return、throw 之后的代码 |
no-unsafe-finally | 禁止在finally块中出现 return、throw、break、continue |
no-unsafe-negation | 禁止出现不安全的否定,如 for (!key in obj} {},应该写为 for (!(key in obj)} {} |
no-unused-expressions | 禁止出现无用的表达式 |
no-unused-labels | 禁止定义不使用的 label |
no-unused-vars | 禁止定义不使用的变量 |
no-use-before-define | 禁止在变量被定义之前使用它 |
no-useless-call | 禁止不必要的 call 和 apply |
no-useless-computed-key | 禁止使用不必要计算的key,如 var a = { ['0']: 0 } |
no-useless-concat | 禁止不必要的字符串拼接 |
no-useless-constructor | 禁止无用的构造函数 |
no-useless-escape | 禁止无用的转义 |
no-useless-rename | 禁止无效的重命名,如 import {a as a} from xxx |
no-useless-return | ❌ 禁止没有必要的 return |
no-var | 禁止使用 var,必须用 let 或 const |
no-void | 禁止使用void |
no-warning-comments | 禁止注释中出现 TODO 或 FIXME,用这个来提醒开发者,写了 TODO 就一定要做完 |
no-whitespace-before-property | 禁止属性前出现空格,如 foo. bar() |
no-with | 禁止 with |
nonblock-statement-body-position | 禁止 if 语句在没有花括号的情况下换行 |
object-curly-newline | ❌ 定义对象的花括号前后是否要加空行 |
object-curly-spacing | ❌ 定义对象的花括号前后是否要加空格 |
object-property-newline | ❌ 对象每个属性必须独占一行 |
object-shorthand | ❌ obj = { a: a } 必须转换成 obj = { a } |
one-var-declaration-per-line | ❌ 每个变量声明必须独占一行 |
one-var | 是否允许使用逗号一次声明多个变量 |
operator-assignment | ❌ 必须使用 x = x + y 而不是 x += y |
operator-linebreak | ❌ 断行时操作符位于行首还是行尾 |
padded-blocks | ❌ 代码块首尾必须要空行 |
padding-line-between-statements | ❌ 限制语句之间的空行规则,比如变量定义完之后必须要空行 |
prefer-arrow-callback | ❌ 必须使用箭头函数作为回调 |
prefer-const | ❌ 声明后不再修改的变量必须使用 const |
prefer-destructuring | ❌ 必须使用解构 |
prefer-numeric-literals | ❌ 必须使用 0b11111011 而不是 parseInt('111110111', 2) |
prefer-promise-reject-errors | promise 的 reject 中必须传入 Error 对象,而不允许使用字面量 |
prefer-rest-params | 必须使用解构 ...args 来代替 arguments |
prefer-spread | ❌ 必须使用 func(...args) 来代替 func.apply(args) |
prefer-template | ❌ 必须使用模板字符串来代替字符串拼接 |
quotes | 字符串必须使用单引号 |
quote-props | ❌ 对象字面量的键名禁止用引号括起来 |
radix | parseInt方法必须传进制参数 |
require-await | ❌ async 函数中必须存在 await 语句 |
require-jsdoc | ❌ 必须使用 jsdoc 风格的注释 |
require-yield | generator 函数内必须有 yield |
rest-spread-spacing | ...后面不允许有空格 |
semi-spacing | ❌ 分号前后的空格规则 |
semi-style | 禁止行首出现分号 |
semi | 行尾必须使用分号结束 |
sort-imports | ❌ imports 必须排好序 |
sort-keys | ❌ 对象字面量的键名必须排好序 |
sort-vars | ❌ 变量声明必须排好序 |
space-before-blocks | ❌ function 等的花括号之前是否使用空格 |
space-before-function-paren | ❌ function 的圆括号之前是否使用空格 |
space-in-parens | ❌ 圆括号内的空格使用规则 |
space-infix-ops | 操作符前后要加空格 |
space-unary-ops | new, delete, typeof, void, yield 等表达式前后必须有空格,-, +, --, ++, !, !! 等表达式前后不许有空格 |
spaced-comment | 注释的斜线和星号后要加空格 |
strict | 禁用严格模式,禁止在任何地方出现 'use strict' |
switch-colon-spacing | ❌ switch 中冒号前后的空格规则 |
symbol-description | 创建 Symbol 的时候必须传入描述 |
template-curly-spacing | ❌ 模板字符串 ${} 前后的空格规则 |
template-tag-spacing | ❌ 模板字符串前后的空格规则 |
unicode-bom | 所有文件头禁止出现 BOM |
use-isnan | 禁止直接对 NaN 进行判断,必须使用 isNaN |
valid-jsdoc | ❌ 注释必须符合 jsdoc 的规范 |
valid-typeof | typeof 判断条件只能是 "undefined", "object", "boolean", "number", "string", "function" 或 "symbol" |
vars-on-top | ❌ var 必须在作用域的最前面 |
wrap-iife | 自执行函数必须使用圆括号括起来,如 (function(){do something...})() |
wrap-regex | ❌ 正则表达式必须用圆括号括起来 |
yield-star-spacing | ❌ yield 的 * 前后空格规则 |
yoda | 禁止Yoda格式的判断条件,如 if (true === a),应使用 if (a === true) |