Spec-Zone.ru › ESLint

no-extra-boolean-cast

Запрет лишних преобразований в булевы значения

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации активирует эту проверку

🔧 Исправимо

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

В контекстах, таких как условие оператора if, где результат выражения уже приводится к булевому типу, преобразование к булевому типу с помощью двойного отрицания (!!) или вызова функции Boolean является избыточным. Например, эти if операторы эквивалентны:

if (!!foo) {
    // ...
}

if (Boolean(foo)) {
    // ...
}

if (foo) {
    // ...
}

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

Это правило запрещает лишние преобразования в булевы значения.

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

Открыть в Playground
/*eslint no-extra-boolean-cast: "error"*/

var foo = !!!bar;

var foo = !!bar ? baz : bat;

var foo = Boolean(!!bar);

var foo = new Boolean(!!bar);

if (!!foo) {
    // ...
}

if (Boolean(foo)) {
    // ...
}

while (!!foo) {
    // ...
}

do {
    // ...
} while (Boolean(foo));

for (; !!foo; ) {
    // ...
}

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

Открыть в Playground
/*eslint no-extra-boolean-cast: "error"*/

var foo = !!bar;
var foo = Boolean(bar);

function qux() {
    return !!bar;
}

var foo = bar ? !!baz : !!bat;

Опции

Это правило имеет опцию объекта:

  • "enforceForInnerExpressions" при установке в значение true, помимо проверки стандартных контекстов, проверяет наличие лишних преобразований в булевы значения в выражениях, результаты которых используются в булевом контексте. См. примеры ниже. Значение по умолчанию false, что означает, что по умолчанию это правило не выдает предупреждение об избыточных преобразованиях в булевы значения внутри вложенных выражений.

Устаревшее: Свойство объекта enforceForLogicalOperands устарело (eslint#18222). Используйте enforceForInnerExpressions вместо него.

enforceForInnerExpressions

Примеры неправильного кода для этого правила с опцией "enforceForInnerExpressions" установленной в true:

Открыть в Playground
/*eslint no-extra-boolean-cast: ["error", {"enforceForInnerExpressions": true}]*/

if (!!foo || bar) {
    //...
}

while (!!foo && bar) {
    //...
}

if ((!!foo || bar) && !!baz) {
    //...
}

var foo = new Boolean(!!bar || baz);

foo && Boolean(bar) ? baz : bat;

const ternaryBranches = Boolean(bar ? !!baz : bat);

const nullishCoalescingOperator = Boolean(bar ?? Boolean(baz));

const commaOperator = Boolean((bar, baz, !!bat));

// another comma operator example
for (let i = 0; console.log(i), Boolean(i < 10); i++) {
    // ...
}

Примеры правильного кода для этого правила с опцией "enforceForInnerExpressions" установленной в true:

Открыть в Playground
/*eslint no-extra-boolean-cast: ["error", {"enforceForInnerExpressions": true}]*/

// Note that `||` and `&&` alone aren't a boolean context for either operand 
// since the resultant value need not be a boolean without casting.
var foo = !!bar || baz;

if (foo || bar) {
    //...
}

while (foo && bar) {
    //...
}

if ((foo || bar) && baz) {
    //...
}

var foo = new Boolean(bar || baz);

foo && bar ? baz : bat;

const ternaryBranches = Boolean(bar ? baz : bat);

const nullishCoalescingOperator = Boolean(bar ?? baz);

const commaOperator = Boolean((bar, baz, bat));

// another comma operator example
for (let i = 0; console.log(i), i < 10; i++) {
    // ...
}

// comma operator in non-final position
Boolean((Boolean(bar), baz, bat));

Версия

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

Ресурсы

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

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-extra-boolean-cast

Spec-Zone.ru

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