Подтвердить что ты не робот

Javascript несколько условий OR в выражении IF

Я думаю, что мне не хватает чего-то основного здесь. Почему третье условие 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?

Спасибо.

4b9b3361

Ответ 1

При операции OR (||), если какое-либо из условий истинно, результат верен.

Я думаю, что вам нужна операция AND (& &).

Ответ 2

Вы хотите выполнить код, где идентификатор отсутствует (1 или 2 или 3), но оператор OR не распространяет над id. Единственный способ сказать, что вы хотите, это сказать

идентификатор не равен 1, а id не равен 2, а id не равен 3.

который переводится на

if (id !== 1 && id !== 2 && id !== 3)

или, альтернативно, для чего-то большего pythonesque:

if (!(id in [,1,2,3]))

Ответ 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]: Это не совсем верно, посмотрите оценку короткого замыкания. В действительности оцениваются только первые два предложения, потому что это все, что необходимо для определения значения истинности выражения.

Ответ 4

потому что оператор OR вернет true, если какое-либо из условий истинно, а в вашем коде есть два условия, которые истинны.

Ответ 5

Когда он проверяет id!= 2, он возвращает true и останавливает дальнейшую проверку