Spec-Zone.ru › ESLint

quote-props

Требовать кавычки вокруг имён свойств литералов объектов

🔧 Исправимо

Некоторые проблемы, выявленные этим правилом, автоматически исправляются опцией --fix командной строки

Это правило было устаревшим в ESLint v8.53.0. Пожалуйста, используйте соответствующее правило соответствующее правило в @stylistic/eslint-plugin-js.

Имена свойств литералов объектов могут быть определены двумя способами: с использованием литералов или строк. Например, эти два объекта эквивалентны:

var object1 = {
    property: true
};

var object2 = {
    "property": true
};

Во многих случаях не имеет значения, использовать ли идентификатор вместо строки или наоборот. Тем не менее, вы можете захотеть обеспечить согласованный стиль в вашем коде.

Однако существуют случаи, когда необходимо использовать кавычки:

  1. Если вы используете движок ECMAScript 3 JavaScript (например, IE8) и хотите использовать ключевое слово (такое как if) в качестве имени свойства. Это ограничение было удалено в ECMAScript 5.
  2. Вы хотите использовать символ, не являющийся идентификатором, в имени свойства, например, свойство со пробелом, как в "one two".

Ещё один пример, где кавычки важны, это использование числовых литералов в качестве ключей свойств:

var object = {
    1e2: 1,
    100: 2
};

На первый взгляд это может выглядеть нормально, но этот код на самом деле выбросит ошибку синтаксиса в режиме строгости ECMAScript 5. Это происходит потому, что 1e2 и 100 преобразуются в строки перед использованием в качестве имени свойства. Оба String(1e2) и String(100) оказываются равны "100", что вызывает ошибку «Не разрешено дублирование свойств данных в литерале объекта в режиме строгости». Такие проблемы могут быть сложными для отладки, поэтому некоторые предпочитают требовать кавычек вокруг всех имён свойств.

Подробное описание правила

Это правило требует кавычек вокруг имён свойств литералов объектов.

Параметры

Это правило имеет два параметра: строковый и объектный.

Строковый параметр:

  • "always" (по умолчанию) требует кавычек вокруг всех имён свойств литералов объектов
  • "as-needed" запрещает использование кавычек вокруг имён свойств литералов объектов, которые не требуются строго
  • "consistent" обеспечивает согласованный стиль кавычек; в данном объекте либо все свойства должны быть в кавычках, либо ни одно
  • "consistent-as-needed" требует кавычек вокруг всех имён свойств литералов объектов, если какое-либо имя строго требует кавычек, в противном случае запрещает использование кавычек вокруг имён свойств объекта

Объектный параметр:

  • "keywords": true требует кавычек вокруг языковых ключевых слов, используемых в качестве имён свойств объекта (применимо только при использовании as-needed или consistent-as-needed)
  • "unnecessary": true (по умолчанию) запрещает использование кавычек вокруг имён свойств литералов объектов, которые не требуются строго (применимо только при использовании as-needed)
  • "unnecessary": false разрешает использование кавычек вокруг имён свойств литералов объектов, которые не требуются строго (применимо только при использовании as-needed)
  • "numbers": true требует кавычек вокруг чисел, используемых в качестве имён свойств объекта (применимо только при использовании as-needed)

always

Примеры некорректного кода для этого правила с параметром по умолчанию "always":

Открыть в Playground
/*eslint quote-props: ["error", "always"]*/

var object = {
    foo: "bar",
    baz: 42
};

Примеры корректного кода для этого правила с параметром по умолчанию "always":

Открыть в Playground
/*eslint quote-props: ["error", "always"]*/

var object1 = {
    "foo": "bar",
    "baz": 42,
    "qux-lorem": true
};

var object2 = {
    'foo': 'bar',
    'baz': 42,
    'qux-lorem': true
};

var object3 = {
    foo() {
        return;
    }
};

as-needed

Примеры некорректного кода для этого правила с параметром "as-needed":

Открыть в Playground
/*eslint quote-props: ["error", "as-needed"]*/

var object = {
    "a": 0,
    "0": 0,
    "true": 0,
    "null": 0
};

Примеры корректного кода для этого правила с параметром "as-needed":

Открыть в Playground
/*eslint quote-props: ["error", "as-needed"]*/

var object1 = {
    "a-b": 0,
    "0x0": 0,
    "1e2": 0
};

var object2 = {
    foo: 'bar',
    baz: 42,
    true: 0,
    0: 0,
    'qux-lorem': true
};

var object3 = {
    foo() {
        return;
    }
};

consistent

Примеры некорректного кода для этого правила с параметром "consistent":

Открыть в Playground
/*eslint quote-props: ["error", "consistent"]*/

var object1 = {
    foo: "bar",
    "baz": 42,
    "qux-lorem": true
};

var object2 = {
    'foo': 'bar',
    baz: 42
};

Примеры корректного кода для этого правила с параметром "consistent":

Открыть в Playground
/*eslint quote-props: ["error", "consistent"]*/

var object1 = {
    "foo": "bar",
    "baz": 42,
    "qux-lorem": true
};

var object2 = {
    'foo': 'bar',
    'baz': 42
};

var object3 = {
    foo: 'bar',
    baz: 42
};

consistent-as-needed

Примеры некорректного кода для этого правила с параметром "consistent-as-needed":

Открыть в Playground
/*eslint quote-props: ["error", "consistent-as-needed"]*/

var object1 = {
    foo: "bar",
    "baz": 42,
    "qux-lorem": true
};

var object2 = {
    'foo': 'bar',
    'baz': 42
};

Примеры корректного кода для этого правила с параметром "consistent-as-needed":

Открыть в Playground
/*eslint quote-props: ["error", "consistent-as-needed"]*/

var object1 = {
    "foo": "bar",
    "baz": 42,
    "qux-lorem": true
};

var object2 = {
    foo: 'bar',
    baz: 42
};

ключевые слова

Примеры дополнительного некорректного кода для этого правила с параметрами "as-needed", { "keywords": true }:

Открыть в Playground
/*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/

var x = {
    while: 1,
    volatile: "foo"
};

Примеры дополнительного некорректного кода для этого правила с параметрами "consistent-as-needed", { "keywords": true }:

Открыть в Playground
/*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/

var x = {
    "prop": 1,
    "bar": "foo"
};

необходмые

Примеры дополнительного корректного кода для этого правила с параметрами "as-needed", { "unnecessary": false }:

Открыть в Playground
/*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/

var x = {
    "while": 1,
    "foo": "bar"  // Would normally have caused a warning
};

числа

Примеры дополнительного некорректного кода для этого правила с параметрами "as-needed", { "numbers": true }:

Открыть в Playground
/*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/

var x = {
    100: 1
}

Когда не следует его использовать

Если вам всё равно, используются ли имена свойств последовательно в кавычках или нет, и вы не ориентируетесь на устаревшие среды ES3, отключите это правило.

Версия

Это правило было добавлено в ESLint v0.0.6.

Дополнительные материалы

Таблица совместимости ECMAScript 5
Незаданные имена свойств/ключей объектов в JavaScript · Mathias Bynens

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/quote-props

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API