【问题标题】:How do I test if a variable does not equal either of two values?如何测试变量是否不等于两个值中的任何一个?
【发布时间】:2011-09-01 05:29:53
【问题描述】:

我想编写一个 if/else 语句来测试文本输入的值是否不等于两个不同值之一。像这样(请原谅我的伪英文代码):

var test = $("#test").val(); 如果(测试不等于 A 或 B){ 做东西; } 别的 { 做其他事情; }

如何在第 2 行写 if 语句的条件?

【问题讨论】:

    标签: javascript if-statement conditional-statements equals boolean-logic


    【解决方案1】:

    !(否定运算符)视为“非”,将||(布尔或运算符)视为“或”,将&&(布尔与运算符)视为“与”。请参阅OperatorsOperator Precedence

    因此:

    if(!(a || b)) {
      // means neither a nor b
    }
    

    但是,使用De Morgan's Law,它可以写成:

    if(!a && !b) {
      // is not a and is not b
    }
    

    上面的ab 可以是任何表达式(例如test == 'B' 或任何需要的表达式)。

    再一次,如果test == 'A'test == 'B', 是表达式,请注意第一种形式的扩展:

    // if(!(a || b)) 
    if(!((test == 'A') || (test == 'B')))
    // or more simply, removing the inner parenthesis as
    // || and && have a lower precedence than comparison and negation operators
    if(!(test == 'A' || test == 'B'))
    // and using DeMorgan's, we can turn this into
    // this is the same as substituting into if(!a && !b)
    if(!(test == 'A') && !(test == 'B'))
    // and this can be simplified as !(x == y) is the same as (x != y)
    if(test != 'A' && test != 'B')
    

    【讨论】:

    • 有没有更短的方法可以做到这一点(伪代码):if(test === ('A' || 'B'))(为了逻辑简单,我删除了!,我对这个概念更好奇)
    • 有一个像if(x == 2|3) 这样的简短版本会很不错。
    【解决方案2】:

    ECMA2016 最短答案,在检查多个值时特别好:

    if (!["A","B", ...].includes(test)) {}
    

    【讨论】:

    • 这是回答问题的 JavaScript 方式。他不是在问如何使用 && 或 ||但他正在寻找一条允许的捷径; test == ('string1' || string2) 相当于 (test == 'string2') || (test == string1)
    • 这是一个古老但相关的参考资料; tjvantoll.com/2013/03/14/…
    【解决方案3】:

    一般来说是这样的:

    if(test != "A" && test != "B")
    

    您可能应该阅读 JavaScript 逻辑运算符。

    【讨论】:

      【解决方案4】:

      我使用 jQuery 来做这件事

      if ( 0 > $.inArray( test, [a,b] ) ) { ... }
      

      【讨论】:

      • 如果有人继续得到不想要的结果,那么您还可以检查测试的 typeof 和 a、b 是否也必须匹配,如果您需要得到 true 作为结果。
      • 根本不喜欢这个,测试(test != 'A' && test != 'B')似乎更容易,而且读起来更好
      【解决方案5】:
      var test = $("#test").val();
      if (test != 'A' && test != 'B'){
          do stuff;
      }
      else {
          do other stuff;
      }
      

      【讨论】:

      • 你的意思是test != A && test != B,否则它会一直执行(除非test == A == B)
      • @Neal:如果值 does NOT equal either one of two -> either 之一,OP 希望代码执行!
      • @Neal:此答案中的if() 将始终为true,因为test 将始终等于其中一个。
      • @patrick:这是不正确的,我已经在我对这个答案的第一条评论中提出了一个反例......
      • @Jurgen:那是伪代码,阅读他的问题,看看他想要什么。
      【解决方案6】:

      您在伪代码中使用了“或”一词,但根据您的第一句话,我认为您的意思是和。对此有些困惑,因为人们通常不是这样说话的。

      你想要:

      var test = $("#test").val();
      if (test !== 'A' && test !== 'B'){
          do stuff;
      }
      else {
          do other stuff;
      }
      

      【讨论】:

        【解决方案7】:

        对于经常检查的大量值,检查 Set 中是否不存在该值可能更有效。

        const values = new Set(["a", "b"]);
        if(!values.has(someValue)){
            // do something
        } else {
            // do something else
        }
        

        【讨论】:

          【解决方案8】:

          这也可以通过 switch 语句来完成。条件的顺序是颠倒的,但这真的没有什么区别(而且它还是稍微简单一些)。

          switch(test) {
              case A:
              case B:
                  do other stuff;
                  break;
              default:
                  do stuff;
          }
          

          【讨论】:

            【解决方案9】:
            if([a,b].includes(test)) {
                do stuff
            }
            

            【讨论】:

            • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
            【解决方案10】:

            我可以建议尝试在 if/else 语句中使用 in else if 语句。如果你不想在你想要的任何条件下运行任何代码,你可以在语句的末尾留下 else 。 else if 也可以用于任意数量的转移路径,这些路径需要每个事物都具有一定的条件。

            如果(条件 1){

            } else if(条件2){

            }否则 {

            }

            【讨论】:

              猜你喜欢
              • 2020-09-19
              • 2013-05-28
              • 2022-11-06
              • 1970-01-01
              • 2012-06-30
              • 2011-11-20
              相关资源
              最近更新 更多