Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   логические операторы (https://javascript.ru/forum/misc/11361-logicheskie-operatory.html)

yngwie19 19.08.2010 21:05

логические операторы
 
Доброго времени суток. Есть пара вопросов по логическому оператору &&.
В одной книге по JS прочитал, что при если
false && stop()

в этом выражении первый аргумент является false, null или undefine, то срабатывает второй оператор, т.е функция stop(). А здесь на сайте в разделе "Логические операторы" написано, что это выражение вернет первый не верный операнд. Подскажите чего я не понимаю?

inGray 19.08.2010 21:07

В больштнстве языков такая конструкция вернет false всегда, согласно правилам матлогики. Ни к чему проверять второе условие, если первое всегда ложно... их произведение всегда ложь.
ЗЫ. Можете поэксперементировать ;)

<script type='text/javascript'>
alert(false && function(){return true;}) //вернет false
alert(null && function(){return true;}) //вернет null
alert(b && function(){return true;}) //ничего не вернет
</script>

yngwie19 19.08.2010 22:39

alert(b && function(){return true;}) //ничего не вернет

а почему в этом примере ничего не вернет?

B@rmaley.e><e 19.08.2010 22:41

Цитата:

Сообщение от yngwie19
false && stop()

В этом случае функция stop даже вызвана не будет.
false && function(){alert('O_o'); return true}(); alert('Ничего не произошло');

yngwie19 20.08.2010 08:07

т.е получается, что если если первый аргумент false - то он и возвращается, а если оба true, то возвращается последний ?

B~Vladi 20.08.2010 08:12

Цитата:

Сообщение от yngwie19
В одной книге по JS прочитал

Цитата:

Сообщение от yngwie19
в этом выражении первый аргумент является false, null или undefine, то срабатывает второй оператор, т.е функция stop()

Скорей сожги книгу.
Цитата:

Сообщение от yngwie19
если если первый аргумент false - то он и возвращается, а если оба true, то возвращается последний ?

Да. Ты же не ожидаешь, что проверка
if(false && true){}

пройдет?

inGray 20.08.2010 11:04

Цитата:

Сообщение от yngwie19 (Сообщение 67985)
alert(b && function(){return true;}) //ничего не вернет

а почему в этом примере ничего не вернет?

b - есть ничего.
Произведение ничего на что-то дает ничего.
Значит функция вернет ничего)

B~Vladi 20.08.2010 12:03

Цитата:

Сообщение от inGray
alert(b && function(){return true;}) //ничего не вернет

Этот пример упадет с ошибкой: b - is not defined. Не морочьте людям головы.

inGray 20.08.2010 12:50

:) Я предложил на первом шаге поэкперементировать... В результате эксперимента выдаст ошибку ;)

haha 20.08.2010 17:59

просто интересно
 
Сей пост дернул за одну мысль.
condition1 &&
(action1() || 1)//предохраняем от "лжи"
||condition2 &&(
    subcondition2_1 && (action2_1() || 1) ||
    subcondition2_2 && (action2_2() || 1)
)||
condition3 && action3() ||//пусть action3 всегда вернет true
action4()

Несмотря на некую нездоровость, такое ветвление работает, и были упразднены слова switch, case, if, else.
Идея не нова, и, может быть, кто-то здесь так пишет?


Часовой пояс GMT +3, время: 10:18.