Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2010, 20:05
Аспирант
Отправить личное сообщение для yngwie19 Посмотреть профиль Найти все сообщения от yngwie19
 
Регистрация: 24.10.2009
Сообщений: 39

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

в этом выражении первый аргумент является false, null или undefine, то срабатывает второй оператор, т.е функция stop(). А здесь на сайте в разделе "Логические операторы" написано, что это выражение вернет первый не верный операнд. Подскажите чего я не понимаю?
Ответить с цитированием
  #2 (permalink)  
Старый 19.08.2010, 20:07
Новичок
Отправить личное сообщение для inGray Посмотреть профиль Найти все сообщения от inGray
 
Регистрация: 03.08.2010
Сообщений: 230

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

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

Последний раз редактировалось inGray, 19.08.2010 в 20:11.
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2010, 21:39
Аспирант
Отправить личное сообщение для yngwie19 Посмотреть профиль Найти все сообщения от yngwie19
 
Регистрация: 24.10.2009
Сообщений: 39

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

а почему в этом примере ничего не вернет?
Ответить с цитированием
  #4 (permalink)  
Старый 19.08.2010, 21:41
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от yngwie19
false && stop()
В этом случае функция stop даже вызвана не будет.
false && function(){alert('O_o'); return true}(); alert('Ничего не произошло');
Ответить с цитированием
  #5 (permalink)  
Старый 20.08.2010, 07:07
Аспирант
Отправить личное сообщение для yngwie19 Посмотреть профиль Найти все сообщения от yngwie19
 
Регистрация: 24.10.2009
Сообщений: 39

т.е получается, что если если первый аргумент false - то он и возвращается, а если оба true, то возвращается последний ?
Ответить с цитированием
  #6 (permalink)  
Старый 20.08.2010, 07:12
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от yngwie19
В одной книге по JS прочитал
Сообщение от yngwie19
в этом выражении первый аргумент является false, null или undefine, то срабатывает второй оператор, т.е функция stop()
Скорей сожги книгу.
Сообщение от yngwie19
если если первый аргумент false - то он и возвращается, а если оба true, то возвращается последний ?
Да. Ты же не ожидаешь, что проверка
if(false && true){}

пройдет?
Ответить с цитированием
  #7 (permalink)  
Старый 20.08.2010, 10:04
Новичок
Отправить личное сообщение для inGray Посмотреть профиль Найти все сообщения от inGray
 
Регистрация: 03.08.2010
Сообщений: 230

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

а почему в этом примере ничего не вернет?
b - есть ничего.
Произведение ничего на что-то дает ничего.
Значит функция вернет ничего)
Ответить с цитированием
  #8 (permalink)  
Старый 20.08.2010, 11:03
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от inGray
alert(b && function(){return true;}) //ничего не вернет
Этот пример упадет с ошибкой: b - is not defined. Не морочьте людям головы.
Ответить с цитированием
  #9 (permalink)  
Старый 20.08.2010, 11:50
Новичок
Отправить личное сообщение для inGray Посмотреть профиль Найти все сообщения от inGray
 
Регистрация: 03.08.2010
Сообщений: 230

Я предложил на первом шаге поэкперементировать... В результате эксперимента выдаст ошибку
Ответить с цитированием
  #10 (permalink)  
Старый 20.08.2010, 16:59
Аспирант
Отправить личное сообщение для haha Посмотреть профиль Найти все сообщения от haha
 
Регистрация: 02.08.2009
Сообщений: 40

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логические выражения suriv Элементы интерфейса 1 28.07.2010 00:53
можно ли переопределить операторы? KOLANICH Общие вопросы Javascript 25 18.06.2010 02:17
Операторы if...else nematod Общие вопросы Javascript 4 23.02.2010 13:10