【问题标题】:JavaScript if statement didn't workJavaScript if 语句不起作用
【发布时间】:2018-07-10 12:59:09
【问题描述】:

我有如下功能

function test (x){
  if(x==='a' || x!=='b' ||'c')
  {
    console.log('result');
    console.log(x);
  }
  else {
    console.log('wrong') 
  } 
}

test('123');

我希望输出会记录“错误”,但它会记录 //result 123,如下图所示。我不确定是不是因为 if 条件不能这样工作?

【问题讨论】:

  • 你认为x !== 'b' || 'c'会做什么?
  • 'c' 是真实的。不管 x 是什么,if 总是正确的
  • @bambam 'c'真实而不是true
  • 应该是:if(x==='a' || x!=='b' || x!== ''c')

标签: javascript if-statement conditional console.log


【解决方案1】:

'c' 将始终解析为 true。你基本上是在说,

'c' 是否等同于真实值?

...当然可以(它是一个非空字符串)。 Read about truthy/falsy.

您可能认为这部分条件会“借用”前一个(b)||。这不会发生。

所以你需要x === 'c'

但是,您的逻辑混乱。你确定你的意思是!== 'b' 而不是=== 'b'?这意味着如果您传递除“b”以外的任何内容,则条件将解析为真,因为您仅使用“或”运算符。

总之,您的意思可能是:

if( x === 'a' || x === 'b' || x === 'c')

可以简化为

if (['a', 'b', 'c'].includes(x))

确实

if (/^[abc]$/.test(x))

【讨论】:

    【解决方案2】:

    您的最后一个条件是'c',即truthy

    Boolean('c');
    // true
    

    【讨论】:

      【解决方案3】:

      您正在使用 OR 语句。所以很明显x(=123) !== 'b''c' 也是如此。

      所以结果是 123

      【讨论】:

        【解决方案4】:

        将您的 if 语句修改为以下内容 if(x==='a' || x!=='b' || x!=='c')

        【讨论】:

        • 在这种情况下,第 2 条和第 3 条语句都是正确的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 2012-11-30
        • 2015-03-28
        • 1970-01-01
        • 2023-02-06
        • 1970-01-01
        相关资源
        最近更新 更多