простой JavaScript, если не работает - PullRequest
0 голосов
/ 13 апреля 2011

Я новичок в javascript и у меня возникли проблемы с, казалось бы, простым оператором if / else.

Может кто-нибудь сообщить мне, почему нижеприведенное не сработает, пожалуйста (я выдернул свои волосы)

var is_expanded = false;
if (is_expanded==false) {
    alert('no');
    is_expanded = true;
} else {
    alert('yes');
}

Я всегда получаю предупреждение «нет» (я никогда не дохожу до остальной части).

Приветствует любую помощь.

Ответы [ 5 ]

9 голосов
/ 13 апреля 2011

Это работает как задумано.

Условие проверяется, когда вы говорите if. Затем он переходит в правильный блок, в данном случае тот, который предупреждает «нет».

Условие не переоценивается после выполнения блока. Это просто не то, как работает оператор if, не на любом языке, который я знаю.

В зависимости от того, что вы хотите сделать, существуют другие шаблоны и конструкции, которые могут вам помочь, например цикл while. Возможно покажите реальный вариант использования, для которого вам это нужно.

2 голосов
/ 13 апреля 2011

Это потому, что is_expanded всегда равно false, потому что вы установили его как false ДО оператора if.

else не сработает, если is_expanded не равно true перед оператором if.

1 голос
/ 13 апреля 2011

Ваша предыдущая строка кода говорит var is_expanded = false; Это означает, что if (is_expanded==false) всегда будет оцениваться как true.

Так что это именно то, что вы получаете в качестве вывода. Чего ты ожидал?

В следующий раз при вызове того же метода значение для is_expanded снова сбрасывается на false из-за вашей первой строки кода. Затем снова будет оповещать no

1 голос
/ 13 апреля 2011
var is_expanded = false;
if (is_expanded==false) {
    alert('no');
    is_expanded = true;
} else {
    alert('yes');
}

Поздравляем!Ваш код работает отлично, поэтому прекратите вырывать волосы.

Природа IF / ELSE заключается в том, что только один из них срабатывает за проход.Итак, ваш код проверяет, является ли is_expanded ЛОЖЬ.Если это ложно, он будет запускать часть IF.Если нет, он запустит ELSE часть.

Просто читай как по-английски.

If something, do this. Otherwise, do something else

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

1 голос
/ 13 апреля 2011

Это нормально. Вы установили переменную is_expanded равной false, поэтому в операторе if вы всегда вводите часть alert('no');. После того, как вы установите для переменной значение true, но оператор if больше не будет выполняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...