Логические операторы в JavaScript - как вы их используете?

Я не понимаю, как &&, || и ! работы ... как с BOOLS и другими типами данных. Как вы их используете?


person DarkLightA    schedule 26.12.2010    source источник


Ответы (2)


Все значения в JavaScript, либо «truthy» или «falsy».

  • a && b принимает значение первого операнда falsy
  • a || b принимает значение первого операнда truthy

Оба оператора не будет оценивать любые операнды после одного возврата.
Если все операнды не совпадают, он будет оценивать до последнего.

  • !a принимает значение true если a является falsy и false если a является truthy.

Все значения являются truthy за исключением следующих, которые falsy:

  • false
  • +0
  • -0
  • NaN
  • ""
  • null
  • undefined
  • document.all
person SLaks    schedule 26.12.2010
comment
Необходимо указать все <я> значение правдив ..., так как есть undefined этого значение, но есть также переменная undefined, которая имеет это значение по умолчанию. Также NaN не равно ни к чему, даже самому себе. - person Ivo Wetzel; 27.12.2010
comment
@Ivo: 1: Фиксированный. 2: Это не имеет значения; !NaN является true, так NaN является falsy. - person SLaks; 27.12.2010
comment
Тем не менее NaN == NaN является ложным. Так что по-прежнему особый случай из приведенного выше списка можно было бы подумать, что NaN работает как любой другой falsy значение. - person Ivo Wetzel; 27.12.2010
comment
@Ivo: SLaks только листинг falsy значения в JavaScript. Он что-нибудь еще о NaN или любой из других значений не претендую. - person Sasha Chedygov; 27.12.2010
comment
Я знаю, что это старая история, но document.all? - person Pointy; 22.08.2018

Если вы хотите проверить, что и из двух условий truthy затем использовать &&:

if (isX && isY)
{
     // Do something.
}

Если вы хотите проверить, что один или оба из двух условий truthy затем использовать ||:

if (isX || isY)
{
     // Do something.
}

В ! инвертирует логическое значение (значение truthy становится ложным, и наоборот).

person Mark Byers    schedule 26.12.2010
comment
Как насчет document.write("Cat"||"Dog")? - person DarkLightA; 27.12.2010
comment
@DarkLightA: Я хотел бы предложить, что вы не писать код, как это! Это вызывает неявные преобразования, и это запутает всех. - person Mark Byers; 27.12.2010
comment
Это не должно никого смущать. Короткое замыкание было общий идиом в JavaScript, так как около 5 лет назад. Крокфорд вызовы || оператора по умолчанию так "Cat" || "Dog" следует читать cat, defaults to dog. Лично я прочитал его как cat, otherwise dog. - person slebetman; 27.12.2010