0

Почему это решить, как ложь:Javascript considitional троичного оператора не правильно решения

var check = true; 
var val = 'bottom-left'; 

(val !== 'top-left' || val !== 'top-right' || val !== 'middle-left' || val !== 'middle-right' || val !== 'middle' || val !== 'bottom-left' || val !== "bottom-right") ? check = false : check = true; 

alert('check: '+check); 

Это потому, что я тестирую Вэла более одного раза? Это работа:

var check = true; 
var val = 'bottom-left'; 

(val !== "bottom-left") ? check = false : check = true; 

alert('check: '+check); 

EDIT:

Дать несколько иначе ДЕЛАЕТ работа:

(val === 'top-left' || val === 'top-right' || val === 'middle-left' || val === 'middle-right' || val === 'middle' || val === 'bottom-left' || val === "bottom-right") ? check = true : check = false; 

Но я до сих пор не совсем понимаю разницу. Либо нужно правильно правильно править?

EDIT 2:

JSFiddle: resolves false

+1

Что-то не так с вашей логикой, потому что выражение в parens всегда будет истинным, так как 'val' всегда будет'! == 'по крайней мере одному из этих значений, так как он может иметь только одно значение. Итак, как построено, это неразумное сравнение. – jfriend00

+0

Вы должны использовать массив, а не массивный список тестов с тем же значением. https://jsfiddle.net/a603zqoL/1/ – Quentin

+0

@Quentin. Очень верно. –

ответ

0

|| оценивает как с левой стороны, если левая сторона истинна, в противном случае он, как с правой стороны.

val !== 'top-left' || val !== 'top-right' || etc 

Если val не 'top-left', то левая рука верно. Таким образом, условие верно.

В противном случае valявляется'top-left' в этом случае это не 'top-right', поэтому условие также верно.

Он никогда не выходит за рамки второго, и условие всегда будет истинным.

+0

См. JSFiddle, он разрешает false. https://jsfiddle.net/a603zqoL/ –

+0

@ user2074704 - Когда я говорю «выражение», я имею в виду выражение, которое используется как условие для тернарной операции (т. е. часть перед?) – Quentin

+0

Согласен логика isn ' t совершенно правильно, и '(val === 'top-left' || val === 'top-right' и т. д.) - лучший подход. Я просто удивлен результатом. В простом английском я думал, что выражение в основном читается: «Если val не является ни одним из них, тогда установите проверку на false». Но val действительно соответствует, поэтому он должен установить проверку на true. –

Смежные вопросы