Spec-Zone.ru › ESLint

eqeqeq

Требуется использование === и !==

🔧 Исправимые

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

Хорошей практикой считается использование безопасных для типов операторов равенства === и !== вместо их обычных аналогов == и !=.

Причина в том, что == и != выполняют приведение типов, которое следует алгоритму абстрактного сравнения на равенство Abstract Equality Comparison Algorithm. Например, следующие утверждения считаются true:

  • [] == false
  • [] == ![]
  • 3 == "03"

Если одно из них встречается в безобидном на вид утверждении, например a == b , то обнаружить проблему очень сложно.

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

Это правило направлено на устранение операторов равенства, небезопасных для типа.

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

Открыть в Playground
/*eslint eqeqeq: "error"*/

if (x == 42) { }

if ("" == text) { }

if (obj.getStuff() != undefined) { }

Опция --fix в командной строке автоматически исправляет некоторые проблемы, сообщаемые этим правилом. Проблема исправляется только в том случае, если один из операндов является typeof выражением или если оба операнда являются литералами одного типа.

Опции

always

Опция "always" (по умолчанию) требует использования === и !== в любой ситуации (за исключением случаев, когда вы выбираете более конкретную обработку null [см. ниже]).

Примеры неправильного кода для опции "always":

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

a == b
foo == true
bananas != 1
value == undefined
typeof foo == 'undefined'
'hello' != 'world'
0 == 0
true == true
foo == null

Примеры правильного кода для опции "always":

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

a === b
foo === true
bananas !== 1
value === undefined
typeof foo === 'undefined'
'hello' !== 'world'
0 === 0
true === true
foo === null

Это правило необязательно принимает второй аргумент, который должен быть объектом со следующими поддерживаемыми свойствами:

  • "null": Настройте, как это правило обрабатывает null литералы. Возможные значения:
    • always (по умолчанию) - Всегда использовать === или !==.
    • never - Никогда не использовать === или !== с null.
    • ignore - Не применять это правило к null.

smart

Опция "smart" требует использования === и !== за исключением этих случаев:

  • Сравнение двух литеральных значений
  • Вычисление значения typeof
  • Сравнение с null

Примеры неправильного кода для опции "smart":

Открыть в Playground
/*eslint eqeqeq: ["error", "smart"]*/

// comparing two variables requires ===
a == b

// only one side is a literal
foo == true
bananas != 1

// comparing to undefined requires ===
value == undefined

Примеры правильного кода для опции "smart":

Открыть в Playground
/*eslint eqeqeq: ["error", "smart"]*/

typeof foo == 'undefined'
'hello' != 'world'
0 == 0
true == true
foo == null

allow-null

Устарело: Вместо использования этой опции используйте "always" и передайте свойство "null" с значением "ignore". Это сообщит ESLint о необходимости всегда применять строгое равенство, кроме сравнения с литералом null.

["error", "always", {"null": "ignore"}]

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

Если вы не хотите навязывать стиль использования операторов равенства, то можно безопасно отключить это правило.

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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