本文档提供了 Airbnb JavaScript 风格指南中最佳实践规则的全面概述。这些规则强制执行编码模式,以防止常见错误、提高代码的可维护性并推广更好的 JavaScript 编程实践。它们是执行 Airbnb JavaScript 风格指南标准的 ESLint 配置系统的关键组成部分。
有关 ES6 特定规则的信息,请参阅 ES6 规则。有关模块导入/导出规则的信息,请参阅 导入规则。
来源: packages/eslint-config-airbnb-base/rules/best-practices.js1-424
最佳实践规则是 Airbnb ESLint 配置中的核心规则类别之一。这些规则侧重于强制执行有助于开发人员避免常见陷阱并编写更易于维护的代码的编码实践。
图示:ESLint 配置层级中的最佳实践规则
来源: packages/eslint-config-airbnb-base/rules/best-practices.js1-424
根据主要目的,最佳实践规则可分为几个功能类别
图示:最佳实践规则的类别
来源: packages/eslint-config-airbnb-base/rules/best-practices.js1-424
下表重点介绍了一些最重要的最佳实践规则及其目的
| 规则 | 描述 | 严重性 | 行号参考 |
|---|---|---|---|
array-callback-return | 强制在数组方法的回调函数中使用 return 语句 | 错误 | 9 |
block-scoped-var | 将 var 声明视为块作用域 | 错误 | 13 |
class-methods-use-this | 强制类方法使用 this | 错误 | 21-23 |
consistent-return | 要求 return 语句始终指定值或从不指定值 | 错误 | 27 |
curly | 为所有控制语句指定花括号约定 | 错误 | 31 |
default-case | 要求 switch 语句中包含 default 情况 | 错误 | 35 |
eqeqeq | 要求使用 === 和 !== | 错误 | 54 |
guard-for-in | 确保 for-in 循环具有 if 语句 | 错误 | 62 |
no-eval | 不允许使用 eval() | 错误 | 118 |
no-param-reassign | 不允许重新分配函数参数 | 错误 | 237-252 |
来源: packages/eslint-config-airbnb-base/rules/best-practices.js3-422
最佳实践规则遵循几种实施模式,这些模式决定了规则如何被强制执行
图示:规则实现模式
来源: packages/eslint-config-airbnb-base/rules/best-practices.js1-424
这些规则强制执行与程序流程控制相关的最佳实践,包括条件语句、循环和错误处理。
curly: 强制多行代码块使用花括号 [第 31 行]default-case: 要求 switch 语句中带有可选注释例外情况的 default 情况 [第 34-35 行]default-case-last: 强制 switch 语句中的 default 子句放在最后 [第 39 行]no-else-return: 不允许 if 语句中的 return 语句之后使用 else 块 [第 91 行]no-lone-blocks: 不允许使用不必要的嵌套块 [第 179 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js31-91 packages/eslint-config-airbnb-base/rules/best-practices.js175-179
no-throw-literal: 限制可以作为异常抛出的内容为 Error 对象 [第 332 行]no-useless-catch: 不允许不必要的 catch 子句 [第 356 行]prefer-promise-reject-errors: 要求使用 Error 对象作为 Promise 拒绝原因 [第 384 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js332-384
这些规则通过改进函数设计、变量使用和对象模式来提升代码质量。
consistent-return: 确保函数始终返回一个值或从不返回值 [第 27 行]no-param-reassign: 防止函数参数重新赋值和属性修改 [第 237-252 行]no-return-assign: 不允许在 return 语句中进行赋值 [第 306 行]no-return-await: 防止冗余的 return await,这会增加不必要的 Promise 解析延迟 [第 310 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js27-310
eqeqeq: 要求使用严格相等运算符(=== 和 !==) [第 54 行]no-self-compare: 防止自身与自身进行比较 [第 324 行]no-new: 不允许在未赋值或未比较时使用 new 运算符 [第 206 行]no-new-func: 防止使用 Function 构造函数创建函数 [第 210 行]no-new-wrappers: 不允许创建 String、Number 和 Boolean 的新实例 [第 214 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js54-324
这些规则可防止可能导致安全漏洞或意外行为的潜在危险模式。
no-eval: 不允许使用 eval() [第 118 行]no-implied-eval: 防止使用 eval() 类似的方法,例如 setTimeout('alert("Hi!");') [第 163 行]no-script-url: 不允许使用 javascript: URL [第 314 行]no-extend-native: 防止扩展原生类型 [第 122 行]no-proto: 不允许使用 __proto__ 属性 [第 256 行]no-with: 防止使用 with 语句 [第 380 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js118-380
Airbnb 配置包含对某些对象属性的特定限制,应避免使用它们,而应使用更好的替代方案
图示:受限属性及其替代方案
来源: packages/eslint-config-airbnb-base/rules/best-practices.js264-302
虽然大多数最佳实践规则的级别设置为 error,但也有一些例外
故意禁用的规则(off)
accessor-pairs: 不强制 getter/setter 对 [第 5 行]complexity: 不限制圈复杂度 [第 17 行]no-magic-numbers: 不阻止代码中的“魔术数字”[第 187-192 行]设置为 warn 的规则
no-alert: 对使用 alert、confirm 和 prompt 发出警告 [第 71 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js5-192
no-param-reassign 规则对于框架和库中的常见模式有特殊的例外情况
| 参数名 | 上下文 |
|---|---|
acc, accumulator | 用于 reduce 累加器 |
e | 用于 e.returnvalue |
ctx, context | 用于 Koa 路由 |
req, request | 用于 Express 请求 |
res, response | 用于 Express 响应 |
$scope | 用于 Angular 1 scope |
staticContext | 用于 ReactRouter context |
来源: packages/eslint-config-airbnb-base/rules/best-practices.js237-252
该配置包含几条标记为 TODO 的规则,以供将来可能包含
no-alert: 当前设置为 warn,但标记为可能升级到 error [第 70 行]no-empty-static-block: 当前为 off,并带有 TODO 注释,将在 semver-major 版本中启用 [第 110 行]no-object-constructor: 当前为 off,并带有 TODO 注释,将在 semver-major 版本中启用 [第 223 行]prefer-object-has-own: 当前为 off,有 ESLint v8.5.0 的要求 [第 393 行]来源: packages/eslint-config-airbnb-base/rules/best-practices.js70-393
最佳实践规则与其他规则类别协同工作,提供全面的 linting 解决方案
图示:最佳实践规则在所有规则类别中的上下文
来源: packages/eslint-config-airbnb-base/rules/best-practices.js1-424
最佳实践规则是 Airbnb JavaScript 风格指南 ESLint 配置的核心组成部分。它们专注于强制执行能够提高代码质量、防止常见错误、增强安全性并促进代码可维护性的模式。通过遵循这些规则,开发人员可以避免许多常见的 JavaScript 陷阱,并编写更健壮的应用程序。
有关特定规则的实现细节,您可以参考 packages/eslint-config-airbnb-base/rules/best-practices.js 文件中每条规则上方注释中链接的 ESLint 文档。