Когда использовать двойное нет (!!) оператор в JavaScript

Я понимаю то, что двойное не оператор делает в JavaScript. Мне любопытно на предмет, это - использование, хотя и корректно ли недавнее утверждение, что я сделал.

Я сказал это if (!!someVar) никогда не значимо, ни (!!someVar && ... потому что оба if и && заставит someVar быть оцененным как булевская переменная так!! является лишним.

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

Это корректно? Я начал сомневаться относительно меня, когда я заметил jQuery 1.3.2 используемых оба if (!!someVar) и return !!someVar && ...

Разве двойное не имеет никакого фактического эффекта в этих ситуациях?

Мое личное мнение - то, что это просто приводит к беспорядку. Если я вижу, если оператор, я знаю, что он оценивает его как булевскую переменную.

31
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

В контексте операторов if Я с вами, это полностью безопасно, потому что внутренне операция ToBoolean будет выполняться для выражения условия ( см. шаг 3 спецификации ).

Но если вы хотите, скажем, вернуть логическое значение из функции, вы должны убедиться, что результат действительно будет логическим, например:

function isFoo () {
  return 0 && true;
}

console.log(isFoo()); // will show zero
typeof isFoo() == "number";

В заключение, Логические операторы может возвращать операнд , но не обязательно логический результат:

Оператор логического И ( && ) вернет значение второго операнда , если первый действительно :

true && "foo"; // "foo"

И он вернет значение первого операнда , если он сам по себе ложный :

NaN && "anything"; // NaN
0 && "anything"; // 0

Вкл. с другой стороны, оператор логического ИЛИ ( || ) вернет значение второго операнда , если первый ложный :

false || "bar"; // "bar"

И он вернет значение первого операнда , если он сам по себе не является ложным:

"foo" || "anything"; // "foo"

Возможно, стоит упомянуть, что ложные значения: null , undefined , NaN , 0 , нулевая линза gth строка и, конечно же, false .

Все остальное (кроме ложного , логического объекта или логического ] значения), вычисленное в логическом контексте , будет return true .

41
ответ дан 27 November 2019 в 22:35
поделиться

Да, !!var используется, когда вы хотите 0||1 возвращаемое значение.

Первое простое сравнение значений bool, когда вы хотите, чтобы "a == b" было эквивалентно "a xor not b", за исключением того, что a=5 и b=7 были бы оба значения истинны, но не были бы равны.

Другое дело, когда вы хотите принудить набор условий в битах переменной:

 var BIT_NONEMPTY=1;
 var BIT_HASERRORS=2;
 var BIT_HASCHILDREN=4;
 var BIT_HASCONTENT=8;

 result_bitfields = 
    (!!countLines())*BIT_NOTEMPTY +
    (!!errorCode())*BIT_HASERRORS +
    (!!firstChild())*BIT_HASCHILDREN +
    (!!getContent())*BIT_HASCONTENT;

Не очень полезно в Javascript, который живет довольно далеко от битовых значений, но может быть полезен иногда.

0
ответ дан 27 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: