菜单

最佳实践规则

相关源文件

目的与范围

本文档提供了 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-varvar 声明视为块作用域错误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: 不允许创建 StringNumberBoolean 的新实例 [第 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,但也有一些例外

  1. 故意禁用的规则(off

    • accessor-pairs: 不强制 getter/setter 对 [第 5 行]
    • complexity: 不限制圈复杂度 [第 17 行]
    • no-magic-numbers: 不阻止代码中的“魔术数字”[第 187-192 行]
  2. 设置为 warn 的规则

    • no-alert: 对使用 alertconfirmprompt 发出警告 [第 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 的规则,以供将来可能包含

  1. no-alert: 当前设置为 warn,但标记为可能升级到 error [第 70 行]
  2. no-empty-static-block: 当前为 off,并带有 TODO 注释,将在 semver-major 版本中启用 [第 110 行]
  3. no-object-constructor: 当前为 off,并带有 TODO 注释,将在 semver-major 版本中启用 [第 223 行]
  4. 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 文档。