eqeqeq
Требуется использование === и !==
Некоторые проблемы, сообщаемые этим правилом, автоматически исправляются с помощью --fix командной строки опции
Хорошей практикой считается использование безопасных для типов операторов равенства === и !== вместо их обычных аналогов == и !=.
Причина в том, что == и != выполняют приведение типов, которое следует алгоритму абстрактного сравнения на равенство Abstract Equality Comparison Algorithm. Например, следующие утверждения считаются true:
[] == false[] == ![]3 == "03"
Если одно из них встречается в безобидном на вид утверждении, например a == b , то обнаружить проблему очень сложно.
Подробности правила
Это правило направлено на устранение операторов равенства, небезопасных для типа.
Примеры неправильного кода для этого правила:
/*eslint eqeqeq: "error"*/
if (x 42) { }
if ("" text) { }
if (obj.getStuff() undefined) { }
Опция --fix в командной строке автоматически исправляет некоторые проблемы, сообщаемые этим правилом. Проблема исправляется только в том случае, если один из операндов является typeof выражением или если оба операнда являются литералами одного типа.
Опции
always
Опция "always" (по умолчанию) требует использования === и !== в любой ситуации (за исключением случаев, когда вы выбираете более конкретную обработку null [см. ниже]).
Примеры неправильного кода для опции "always":
/*eslint eqeqeq: ["error", "always"]*/
a b
foo true
bananas 1
value undefined
typeof foo 'undefined'
'hello' 'world'
0 0
true true
foo null
Примеры правильного кода для опции "always":
/*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":
/*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":
/*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