Является ли это избыточным использованием !! логическая структура, когда значение равно true или false?

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

У меня есть eslint для моей кодовой базы, и я недавно исправил все исправимые ошибки.

Одно из этих исправлений, включая отрицание двойного восклицательного знака.

Один пример до исправления и после:

// BEFORE eslint fix:
import { IS_DEV } from "./config/clientUrl";
const sandboxMode = IS_DEV ? true : false;
// AFTER eslint fix:
import { IS_DEV } from "./config/clientUrl";
const sandboxMode = !!IS_DEV;

Исправление было правильным, обнаружив, что оно было избыточным, поскольку IS_DEV здесь уже является логическим значением. Поэтому я знаю, что значение либо истинно, либо ложно.

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

const sandboxMode = !!IS_DEV;

и используя просто без него:

const sandboxMode = IS_DEV;

Не будет ли это очередным увольнением в данном случае?


person Luis Febro    schedule 27.02.2021    source источник
comment
Я думаю, что это совершенно безвредно и делает код читабельным: опытный программист на JavaScript распознает, что вы создаете значение true или false.   -  person Pointy    schedule 27.02.2021
comment
Это излишне, если вы знаете, что IS_DEV является логическим значением. Но тогда так, конечно, ваш оригинал. Однако Eslint не знает тип, и для значения неизвестного типа ваша фиксированная версия гораздо более идиоматична, чем исходная тройка.   -  person Robin Zigmond    schedule 27.02.2021


Ответы (1)


Несколько моментов к моему ответу:

  • Если вы точно знаете, что IS_DEV будет либо true, либо false (логическое значение) и НИКОГДА ничем другим, вы можете просто использовать это: const sandboxMode = IS_DEV
  • Если возможно, что IS_DEV не будет установлен (таким образом, будет undefined), вы должны использовать const sandboxMode = !!IS_DEV, что заставит sandboxMode быть логическим значением.
  • Но это также зависит от того, как потребляется sandboxMode!
person Freddy    schedule 27.02.2021