【问题标题】:Javascript considitional ternary operator not resolving correctlyJavascript条件三元运算符无法正确解析
【发布时间】: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


【解决方案1】:

|| 如果左侧为真,则评估为左侧,否则评估为右侧。

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

如果val 不是'top-left',则左侧为真。所以条件为真。

否则val 'top-left' 在这种情况下不是'top-right',所以条件也成立。

它永远不会超过第二个,并且条件永远为真。

【讨论】:

  • @user2074704 — 当我说“表达式”时,我指的是用作三元运算条件的表达式(即 ? 之前的部分)
  • 我同意逻辑不太正确,(val === 'top-left' || val === 'top-right' etc) 是更好的方法。我只是对结果感到惊讶。用简单的英语,我认为这个表达基本上是:if val isn't any of these then set check to false。但是 val 确实匹配,所以它应该将 check 设置为 true。
  • 但这并不意味着。即使你用简单的英语读出来,它也不会说:如果 val 不是左上角,或者如果 val 不是右上角。 (并不是说你会用简单的英语说,因为它没有意义,如果是左上角,那么当然它不是右上角)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多