Spec-Zone.ru › ESLint

quote-props

Требовать заключать имена свойств литералов объектов в кавычки

🔧 Можно исправить автоматически

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

Важно

Это правило было устаревшим объявлено в ESLint v8.53.0. Оно будет удалено в v11.0.0. Используйте соответствующее правило из @stylistic/eslint-plugin.

Подробнее

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

var object1 = {
    property: true
};

var object2 = {
    "property": true
};

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

Однако в некоторых случаях кавычки обязательны:

  1. Если вы используете JavaScript-движок ECMAScript 3 (например, 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
};

keywords

Примеры дополнительного неправильного кода для этого правила со значениями параметров "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"
};

unnecessary

Примеры дополнительного правильного кода для этого правила со значениями параметров "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
};

numbers

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

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

var x = {
    100: 1
}

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

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

Версия

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

Дополнительная литература

Таблица совместимости с ECMAScript 5
kangax.github.io
Имена свойств без кавычек / ключи объектов в JavaScript · Mathias Bynens
mathiasbynens.be

Ресурсы

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

© 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