非常教程

Eslint参考手册

规则 | Rules

prefer-destructuring

使用 JavaScript ES6,添加了一种新的语法,用于从数组索引或对象属性创建变量,称为解构。此规则强制使用解构而不是通过成员表达式访问属性。

规则细节

选项

该规则采用两组配置对象。第一个对象参数决定了规则适用的解构类型。

两个属性,arrayobject,可用于打开或关闭每一个这些类型独立的解构要求。默认情况下,两者都是真实的。

或者,您可以对不同的分配类型使用不同的配置。它接受2个其他键而不是arrayobject

一个关键是VariableDeclarator另一个AssignmentExpression,它可以用来独立地控制每种类型的解构要求。每个属性接受接受两个属性的对象,array并且object,它可以被用来控制用于每个的解体要求arrayobject独立地为变量声明和赋值表达式。默认情况下,arrayobject设置为 true 两个VariableDeclaratorAssignmentExpression

该规则具有第二个具有单个键的对象enforceForRenamedProperties,它确定object解构是否适用于重命名的变量。

此规则的错误代码示例:

// With `array` enabled
var foo = array[0];

// With `object` enabled
var foo = object.foo;
var foo = object['foo'];

此规则的正确代码示例:

// With `array` enabled
var [ foo ] = array;
var foo = array[someIndex];

// With `object` enabled
var { foo } = object;
var foo = object.bar;

不正确的代码enforceForRenamedProperties启用时的示例:

var foo = object.bar;

启用时的正确代码示例enforceForRenamedProperties

var { bar: foo } = object;

一个示例配置,使用默认值arrayobject填充,如下所示:

{
  "rules": {
    "prefer-destructuring": ["error", {
      "array": true,
      "object": true
    }, {
      "enforceForRenamedProperties": false
    }]
  }
}

两个属性,arrayobject,它可以被用于开启或关闭每个这些类型的独立地解构要求。默认情况下,两者都是真实的。

例如,以下配置仅强制执行对象解构,而不执行数组解构:

{
  "rules": {
    "prefer-destructuring": ["error", {"object": true, "array": false}]
  }
}

一个示例配置,使用默认值VariableDeclaratorAssignmentExpression填充,如下所示:

{
  "rules": {
    "prefer-destructuring": ["error", {
      "VariableDeclarator": {
        "array": false,
        "object": true
      },
      "AssignmentExpression": {
        "array": true,
        "object": true
      }
    }, {
      "enforceForRenamedProperties": false
    }]
  }
}

两个属性,VariableDeclaratorAssignmentExpression,它可以被用来打开或关闭用于解构要求arrayobject。默认情况下,所有值都是 true。

例如,以下配置在变量声明中强制执行对象解构,并在赋值表达式中强制执行数组解构。

{
  "rules": {
    "prefer-destructuring": ["error", {
      "VariableDeclarator": {
        "array": false,
        "object": true
      },
      "AssignmentExpression": {
        "array": true,
        "object": false
      }
    }, {
      "enforceForRenamedProperties": false
    }]
  }
}

VariableDeclarator强制执行对象解构时的正确代码示例:

/* eslint prefer-destructuring: ["error", {VariableDeclarator: {object: true}}] */
var {bar: foo} = object;

AssignmentExpression强制执行数组解构时正确代码的示例:

/* eslint prefer-destructuring: ["error", {AssignmentExpression: {array: true}}] */
[bar] = array;

何时不使用它

如果您希望能够直接访问数组索引或对象属性,则可以将规则配置为您的口味或完全禁用该规则。

此外,如果您打算直接访问大型数组索引,如:

var foo = array[100];

那么这个规则的array部分是不推荐的,因为解构不能很好地匹配这个用例。

或者对于不可迭代的“类似数组”的对象:

var $ = require('jquery');
var foo = $('body')[0];
var [bar] = $('body'); // fails with a TypeError

进一步阅读

如果您想了解更多关于解构的信息,请查看下面的链接:

  • 解构分配(MDN)
  • ECMAScript 6中的解构和参数处理(2ality 博客)

版本

该规则在 ESLint 3.13.0中引入。

资源

  • 规则资源
  • 文档资源

规则 | Rules相关

1.accessor-pairs
2.array-bracket-newline
3.array-bracket-spacing
4.array-callback-return
5.array-element-newline
6.arrow-body-style
7.arrow-parens
8.arrow-spacing
9.block-scoped-var
10.block-spacing
11.brace-style
12.callback-return
13.camelcase
14.capitalized-comments
15.class-methods-use-this
16.comma-dangle
17.comma-spacing
18.comma-style
19.complexity
20.computed-property-spacing
21.consistent-return
22.consistent-this
23.constructor-super
24.curly
25.default-case
26.dot-location
27.dot-notation
28.eol-last
29.eqeqeq
30.for-direction
31.func-call-spacing
32.func-name-matching
33.func-names
34.func-style
35.function-paren-newline
36.generator-star
37.generator-star-spacing
38.getter-return
39.global-require
40.global-strict
41.guard-for-in
42.handle-callback-err
43.id-blacklist
44.id-length
45.id-match
46.implicit-arrow-linebreak
47.indent
48.indent-legacy
49.init-declarations
50.jsx-quotes
51.key-spacing
52.keyword-spacing
53.line-comment-position
54.linebreak-style
55.lines-around-comment
56.lines-around-directive
57.lines-between-class-members
58.max-depth
59.max-len
60.max-lines
61.max-nested-callbacks
62.max-params
63.max-statements
64.max-statements-per-line
65.multiline-comment-style
66.multiline-ternary
67.new-cap
68.new-parens
69.newline-after-var
70.newline-before-return
71.newline-per-chained-call
72.no-alert
73.no-array-constructor
74.no-arrow-condition
75.no-await-in-loop
76.no-bitwise
77.no-buffer-constructor
78.no-caller
79.no-case-declarations
80.no-catch-shadow
81.no-class-assign
82.no-comma-dangle
83.no-compare-neg-zero
84.no-cond-assign
85.no-confusing-arrow
86.no-console
87.no-const-assign
88.no-constant-condition
89.no-continue
90.no-control-regex
91.no-debugger
92.no-delete-var
93.no-div-regex
94.no-dupe-args
95.no-dupe-class-members
96.no-dupe-keys
97.no-duplicate-case
98.no-duplicate-imports
99.no-else-return
100.no-empty
Eslint

ESLint 是一个代码规范和错误检查工具,有以下几个特性。所有东西都是可以插拔的。你可以调用任意的 rule api 或者 formatter api 去打包或者定义 rule or formatter。任意的 rule 都是独立的。没有特定的 coding style,你可以自己配置。

主页 https://eslint.org/
源码 https://github.com/eslint/eslint
发布版本 4.12.0

Eslint目录

1.指南 | Guide
2.规则 | Rules