【问题标题】:Javascript OR conditional operator not working as expected [duplicate]Javascript OR条件运算符未按预期工作[重复]
【发布时间】:2020-12-24 14:52:08
【问题描述】:

我正在试验 JavaScript 条件。在下面的代码中,为什么我的第一个条件没有返回 true 而第二个条件返回?

Javascript:

   arr = [1,2,3];
        if (arr[0] !== (1 || 2)){console.log('true')}
        //undefined

        if (arr[0] !== (2 || 1)){console.log('true')}
        //true

【问题讨论】:

  • 上述的预期结果是什么(假装它会这样工作)?
  • 尝试运行 console.log(1 || 2)console.log(2 || 1) 并查看它们记录的值。
  • "在条件语句中使用逻辑 OR 运算符时的一个常见错误是尝试声明您正在检查其值的变量一次,然后给出可能返回 true 的值列表,分隔通过 || (OR) 运算符”developer.mozilla.org/en-US/docs/Learn/JavaScript/…
  • 理解这一点的更简单方法是知道在任何复合if 语句中,每个条件都必须是可以独立评估的完整条件。 (1 || 2) 不是一个完整的条件,在这种情况下将始终评估为 true
  • 看起来您实际上是在尝试执行以下操作:[1,2].indexOf(arr[0])<0

标签: javascript conditional-statements


【解决方案1】:

|| 将评估为:

  • 第一个值,如果它是真的,或者
  • 最终值(可能为真或假)

由于1 为真,(1 || 2) 的计算结果为1

if (arr[0] !== (1 || 2)){console.log('true')}
// resolves to
if (1 !== (1 || 2)){console.log('true')} // resolves to
if (1 !== (1)){console.log('true')} // resolves to
if (1 !== 1){console.log('true')} // resolves to
if (false){console.log('true')}

所以第一个if 语句没有通过。在第二种情况下,2 || 1 求值为2 的第一个真值,因此if 语句成功。

【讨论】:

    【解决方案2】:

    为此,您需要一个数字数组来检查和否定检查。

    const arr = [1, 2, 3];
    
    if (![1, 2].includes(arr[0])) {
        console.log(arr[0], 'is not', 1, 'or', 2);
    }
    
    if (![1, 2].includes(arr[2])) {
        console.log(arr[2], 'is not', 1, 'or', 2);
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2012-04-29
      • 2018-02-19
      • 1970-01-01
      • 2013-06-23
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多