如何测试变量是不是不等于两个值中的任何一个?
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
上面的a
和b
可以是任何表达式(例如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 - 如何证明数组中的任何项目是不是等于特定值,而不是在“真”的情况下从另一个数组中提取项目?