【发布时间】:2015-05-17 03:37:31
【问题描述】:
为什么这个解析为假:
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);
是因为我不止一次测试 val 吗?这确实有效:
var check = true;
var val = 'bottom-left';
( val !== "bottom-left" ) ? check = false : check = true;
alert('check: '+check);
编辑:
稍微不同的写法确实有效:
( val === 'top-left' || val === 'top-right' || val === 'middle-left' || val === 'middle-right' || val === 'middle' || val === 'bottom-left' || val === "bottom-right" ) ? check = true : check = false;
但我还是不太明白其中的区别。两者都应该正确解决吗?
编辑 2:
JSFiddle:resolves false
【问题讨论】:
-
您的逻辑有问题,因为括号中的表达式将始终为真,因为
val对于这些值中的至少一个始终为!==,因为它只能有一个值。因此,按照构造,这是一个不明智的比较。 -
您应该使用数组而不是针对相同值进行大量测试。 jsfiddle.net/a603zqoL/1
-
@昆汀。非常真实。
标签: javascript conditional-statements ternary-operator conditional-operator