本文档提供了 Airbnb JavaScript 风格指南中错误预防规则的全面概述。这些规则专门设计用于在常见的编程错误和潜在的 bug 进入生产代码之前捕获和预防它们。有关其他规则类别的信息,请参阅最佳实践规则、ES6 规则或变量和严格模式规则。
来源:packages/eslint-config-airbnb-base/rules/errors.js1-189
错误预防规则是 Airbnb JavaScript 风格指南的 Linting 系统的一个关键组成部分。这些规则专注于检测和预防常见的 JavaScript 错误,帮助开发者编写更可靠的代码。几乎所有的错误预防规则都设置为 error 严重性级别,这表明它们在维护代码质量方面至关重要。
这些规则作为 eslint-config-airbnb-base 的一部分实现,主要在 errors.js 文件中定义。
错误预防规则组织
来源:packages/eslint-config-airbnb-base/rules/errors.js1-189
这些规则用于捕获代码中的潜在语法问题和逻辑错误
| 规则 | 目的 | 严重性 |
|---|---|---|
for-direction | 强制执行“for”循环的更新子句以正确的方向移动 | error |
no-cond-assign | 防止在条件表达式中意外赋值 | error |
no-constant-condition | 防止在条件中使用常量表达式 | warn |
no-dupe-args | 防止在函数声明中使用重复的参数 | error |
no-dupe-else-if | 防止在 if-else-if 链中使用重复的条件 | error |
no-dupe-keys | 防止在对象字面量中使用重复的键 | error |
no-duplicate-case | 防止在 switch 语句中使用重复的 case 标签 | error |
no-empty | 防止出现没有注释的空块 | error |
no-extra-semi | 防止出现不必要的分号 | error |
no-func-assign | 防止覆盖以函数声明形式声明的函数 | error |
no-import-assign | 防止为导入的绑定赋值 | error |
no-inner-declarations | 防止在嵌套块中使用函数/变量声明 | error |
no-unreachable | 防止 return、throw、continue 或 break 语句之后的代码不可达 | error |
no-unreachable-loop | 防止循环体只允许一次迭代 | error |
来源:packages/eslint-config-airbnb-base/rules/errors.js3-146
这些规则侧重于预防正则表达式模式中的错误
| 规则 | 目的 | 严重性 |
|---|---|---|
no-control-regex | 防止在正则表达式中使用控制字符 | error |
no-empty-character-class | 防止在正则表达式中使用空字符类 | error |
no-invalid-regexp | 防止使用无效的正则表达式字符串 | error |
no-regex-spaces | 防止在正则表达式字面量中使用多个空格 | error |
no-misleading-character-class | 防止在字符类语法中使用由多个代码点组成的字符 | error |
no-useless-backreference | 防止在正则表达式中使用无用的反向引用 | error |
来源:packages/eslint-config-airbnb-base/rules/errors.js37-167
这些规则用于捕获处理异步代码时的常见错误
| 规则 | 目的 | 严重性 |
|---|---|---|
no-async-promise-executor | 防止将 async 函数用作 Promise 执行器 | error |
no-await-in-loop | 防止在循环中使用 await(可能导致性能问题) | error |
no-promise-executor-return | 防止从 Promise 执行器函数返回值 | error |
require-atomic-updates | 防止由于 await/yield 引起的竞争条件(由于 bug 已禁用) | off |
来源:packages/eslint-config-airbnb-base/rules/errors.js11-176
这些规则有助于预防与 JavaScript 类型系统相关的错误
| 规则 | 目的 | 严重性 |
|---|---|---|
no-compare-neg-zero | 防止与负零进行比较 | error |
no-loss-of-precision | 防止数字字面量丢失精度 | error |
no-obj-calls | 防止将全局对象的属性用作函数 | error |
use-isnan | 强制在检查 NaN 时使用 isNaN() | error |
valid-typeof | 确保 typeof 结果与有效字符串进行比较 | error |
来源:packages/eslint-config-airbnb-base/rules/errors.js19-187
这些规则解决了各种其他潜在的错误来源
| 规则 | 目的 | 严重性 |
|---|---|---|
getter-return | 强制属性 getter 中使用 return 语句 | error |
no-console | 警告控制台用法(通常在生产中移除) | warn |
no-debugger | 防止 debugger 语句 | error |
no-ex-assign | 防止在 catch 块中重新分配异常 | error |
no-extra-boolean-cast | 防止不必要的布尔值转换 | error |
no-prototype-builtins | 防止直接使用 Object.prototype 方法 | error |
no-sparse-arrays | 防止数组出现缺失的元素 | error |
no-template-curly-in-string | 防止在普通字符串中使用模板字面量语法 | error |
no-unsafe-finally | 防止在 finally 块中使用控制流语句 | error |
no-unsafe-negation | 防止对关系运算符的左操作数进行否定 | error |
no-unsafe-optional-chaining | 防止可选链与潜在的 undefined 值一起使用 | error |
no-setter-return | 防止 setter 中返回值 | error |
来源:packages/eslint-config-airbnb-base/rules/errors.js7-160
大多数错误预防规则都设置为 error 严重性,这意味着违反这些规则将导致 Linting 过程失败。这种严格性凸显了预防潜在 bug 的重要性。
来源:packages/eslint-config-airbnb-base/rules/errors.js1-189
错误预防规则在 eslint-config-airbnb-base 包内的 errors.js 文件中进行配置。此配置是核心 ESLint 规则集的一部分,在使用 eslint-config-airbnb-base 或完整的 eslint-config-airbnb 包时都会自动包含。
来源:packages/eslint-config-airbnb-base/rules/errors.js1-2
一些错误预防规则默认关闭,但可能会在未来版本中考虑
no-constant-binary-expression - 防止不影响值的操作no-new-native-nonconstructor - 防止使用 new 关键字与全局非构造函数一起使用no-unused-private-class-members - 防止使用未使用的私有类成员这些规则标记有“TODO”注释,表明它们正在被考虑用于未来采用。
来源:packages/eslint-config-airbnb-base/rules/errors.js30-163
几条规则具有超出简单开启/关闭设置的特定配置
getter-return - 允许使用 { allowImplicit: true } 进行隐式返回no-cond-assign - 设置为 always 模式以捕获条件中的所有赋值no-unreachable-loop - 配置为检查所有循环类型no-unsafe-optional-chaining - 配置为 { disallowArithmeticOperators: true }valid-typeof - 设置为 { requireStringLiterals: true } 以强制进行严格比较这些特殊的配置展示了 Airbnb 彻底预防错误的策略。
来源:packages/eslint-config-airbnb-base/rules/errors.js9-187
错误预防规则是 Airbnb JavaScript 风格指南的关键组成部分,旨在在许多常见的编程错误导致生产问题之前捕获它们。通过 ESLint 强制执行这些规则,项目可以维护更高的代码质量,并减少与语法、类型、正则表达式和异步代码相关的 bug。有关集成说明,请参阅安装和设置。