Ответ 1
При операции OR
(||), если какое-либо из условий истинно, результат верен.
Я думаю, что вам нужна операция AND
(& &).
Я думаю, что мне не хватает чего-то основного здесь. Почему третье условие IF истинно? Не должно ли условие оцениваться как ложное? Я хочу сделать что-то, где id не 1, 2 или 3.
var id = 1;
if(id == 1) //true
if(id != 1) //false
if(id != 1 || id != 2 || id != 3) //this returns true. why?
Спасибо.
При операции OR
(||), если какое-либо из условий истинно, результат верен.
Я думаю, что вам нужна операция AND
(& &).
Вы хотите выполнить код, где идентификатор отсутствует (1 или 2 или 3), но оператор OR не распространяет над id. Единственный способ сказать, что вы хотите, это сказать
идентификатор не равен 1, а id не равен 2, а id не равен 3.
который переводится на
if (id !== 1 && id !== 2 && id !== 3)
или, альтернативно, для чего-то большего pythonesque:
if (!(id in [,1,2,3]))
Каждое из трех условий оценивается независимо [1]:
id != 1 // false
id != 2 // true
id != 3 // true
Затем он оценивает false || true || true
, что истинно (a || b
истинно, если либо a
, либо b
истинно). Я думаю, вы хотите
id != 1 && id != 2 && id != 3
что верно, только если идентификатор не равен 1 И это не 2 И это не 3.
[1]: Это не совсем верно, посмотрите оценку короткого замыкания. В действительности оцениваются только первые два предложения, потому что это все, что необходимо для определения значения истинности выражения.
потому что оператор OR вернет true, если какое-либо из условий истинно, а в вашем коде есть два условия, которые истинны.
Когда он проверяет id!= 2, он возвращает true и останавливает дальнейшую проверку