如何测试变量是不是不等于两个值中的任何一个?

Posted

技术标签:

【中文标题】如何测试变量是不是不等于两个值中的任何一个?【英文标题】: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 语句的条件?

【问题讨论】:

【参考方案1】:

!(否定运算符)视为“非”,将||(布尔或运算符)视为“或”,将&&(布尔与运算符)视为“与”。请参阅Operators 和Operator 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)

否则

【讨论】:

以上是关于如何测试变量是不是不等于两个值中的任何一个?的主要内容,如果未能解决你的问题,请参考以下文章

如何在行和返回值中匹配一个变量而不是在r代码中返回另一行的另一个条件

如何检查树枝中的变量是不是等于零并定义值

Meteor / MongoDB - 如何证明数组中的任何项目是不是等于特定值,而不是在“真”的情况下从另一个数组中提取项目?

C#中,如何让一个变量值不等于指定的两个值

Laravel 5.2验证检查值是不是不等于变量

确定变量是不是等于值“列表”中的值的最简洁方法