Javascript.RU

Логические операторы

Описание, примеры

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

Однако, в javascript операторы && и || возвращают не булево значение, а один из операндов, определивший значение выражения. Конечно, результат в таком случае может быть и не булевым.

Логические операторы описаны следующей таблицей:

Оператор Использование Описание
Логическое И (&&) expr1 && expr2 Возвращает expr1, если оно может быть преобразовано к false; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, && вернет true только если оба операнда истинны, иначе false.
Логическое ИЛИ (||) expr1 || expr2 Возвращает expr1, если оно может быть преобразовано к true; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, || вернет true только в том случае, когда хотя бы один операнд истинен, иначе вернет false.
Логическое НЕ (!) !expr Возвращает false, если операнд может быть преобразован к true, в ином случае возвращает true.

К false преобразуются, например: null, 0, пустая строка ("") и undefined.

Хотя операторы && и || и могут быть использованы для возвращения небулевых значений, они все же логические, так как возвращаемые значения могут быть приведены к булевому типу.

Оператор ! также используется для быстрого преобразования выражения к булевому значению:

!!"string" = true
!!null = false

Сокращенные вычисления

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

  • false && что угодно становится false.
  • true || что угодно становится true.

Эти правила логики гарантируют, что результат всегда правильный, но лишних вычислений при этом не проводится. Как следствие, невычисленные выражения не дадут побочных эффектов:

a =1
check = 5 || (a=3)

alert(a) // 1

См. также


Автор: DooMer, дата: 26 октября, 2010 - 10:47
#permalink

Хорошая статья, но Вы забыли про изключающее или (xor)


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2010 - 22:55
#permalink

В JS есть только побитовый XOR


Автор: Гость (не зарегистрирован), дата: 11 июня, 2011 - 18:42
#permalink

Что приоритетнее в коде, И или ИЛИ?
Что будет выполняться сначала ,а что после:

if (a = b || a > b && a < c)
Как это будет звучать?
Если а = b или a > b, и вместе с этим a < b.
Если a = b или b < a < c?
Как?


Автор: Гость (не зарегистрирован), дата: 5 июля, 2011 - 00:12
#permalink

Скобки расставь и будет тебе счастье.


Автор: Гость (не зарегистрирован), дата: 12 декабря, 2011 - 13:25
#permalink

Почему плохо (если плохо) писать:

flag && some_func();

вместо

if (flag) {
some_func();
}

?
JSlint ругается. Может быть существует какая-то угроза, что в будущем логические вычисления будут делаться не по короткой схеме?


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама

Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum
Последние комментарии