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