Spec-Zone.ru › ESLint

eqeqeq

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

🔧 Можно исправить

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

💡 Есть предложения

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

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

Причина в том, что == и != выполняют приведение типов в соответствии с довольно неочевидным алгоритмом абстрактного сравнения равенства. Например, все следующие выражения считаются 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