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

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


Автор: Дзен-трансгуманист, дата: 9 июля, 2012 - 03:44
#permalink

О приоритетах исполнения операторов в JS можно почитать, например, на сайте Мозиллы здесь и здесь.
В данном случае сперва отработает И, затем - ИЛИ.

Но чтобы код был понятнее - лучше все-таки использовать скобки.


Автор: Snake22, дата: 3 января, 2013 - 02:48
#permalink

при сравнении указывай два равно ==


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

&& - считается логическим умножением

|| - логическое сложение

Приоритеты соответствующие.


Автор: Гость (не зарегистрирован), дата: 18 января, 2015 - 02:21
#permalink

Ошибка новичка - присваивать значения тогда, когда нужно их сравнивать.
a == b (a = b оператор присваивания)...


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

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

flag && some_func();

вместо

if (flag) {
some_func();
}

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


Автор: zenitchik (не зарегистрирован), дата: 8 июля, 2012 - 22:47
#permalink

Никакой угрозы. Google Closure именно так и поступает, когда сжимает код


Автор: BRIGSS, дата: 10 февраля, 2015 - 22:19
#permalink

а одиночный амперсанд где?


Автор: Ghostgineer (не зарегистрирован), дата: 30 ноября, 2015 - 12:04
#permalink

Где ошибка?

if ((aYaw>180&&vYaw<180) || (aYaw<180&&>vYaw>180))

Автор: Гость (не зарегистрирован), дата: 10 сентября, 2016 - 10:49
#permalink

Здесь:

&&>vYaw

Автор: msangel (не зарегистрирован), дата: 10 января, 2016 - 00:29
#permalink

у меня возник вполне справедливый вопрос - а почему нельзя так:

var UpdatableResource = function (config) {
  this.remoteUrl = config.remoteUrl || throw new Error('remoteUrl option is required');
};

var res1 = new UpdatableResource({remoteUrl : 'valid'});
var res2 = new UpdatableResource(); // invalid

?


Автор: x6a0x (не зарегистрирован), дата: 2 февраля, 2016 - 19:29
#permalink

var w = 0;
do{
w = prompt("Туз: 1 или 11")
alert(w)
}while(w != "11" || w != "1");

parseInt - не помогает

значение w меняеться но вот while все ровно читает как false даже если w = 11, w = 1, w = "1", w = "11"


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

w != "11"
w !== "11"


Автор: Гость (не зарегистрирован), дата: 3 января, 2017 - 11:34
#permalink

фрагмент кода:
x=parseInt(prompt("Сколько кранов надо собрать?",""))
b=parseInt(prompt("Введите количество корпусов(У.ДК.050.02)",""));
c=parseInt(prompt("Введите количество патрубков(ДК.050.01-32п)",""));
d=parseInt(prompt("Введите количество шайб(У.ДК.050.03) ",""))
e=parseInt(prompt("Введите количество сёдел(У.Д.ПИ.050.04-33п)",""))
if (!b||b<0||!c||c<0||!d||d<0||!e||e<0||!x||x<0){document.write("Введите число правильно")}
При этом нельзя вводить с клавиатуры буквы,отрицательные числа,но и также нельзя ввести 0 !! А этого очень хотелось бы!! Но как!! Вопрос вопросов!!!


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

Я не уверен, я только учусь, но попробуй перед if вставить
switch(x){
case(0):
x=true;
}
и так для каждой переменной x b c d e. Сработает, но в переменную запишет true.


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

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
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
Антиспам
8 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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