多条件if语句-语法简化

3

抱歉,这是一个基础问题。以下代码中如何简化多个if条件语句:

var x = foo;
if ((x == "val1") || (x == "val2")) {
    alert('Hello World');
}

6
如果 x 的值是 'val1''val2' 中的一个,那么条件成立。在代码中的表现形式为:if (['val1', 'val2'].indexOf(x) >= 0) - fuyushimoya
2
请使用 switch 代替... - Guruprasad J Rao
1
我认为你的代码不需要进一步简化。 - Kaf
相关问题 - https://dev59.com/rFwZ5IYBdhLWcg3wGs_D#31855768 - CodingIntrigue
1
我得跟随 @Kaf 的意见,这个语句并不复杂。如果有二十个不同的检查而不是两个,那我会考虑一下。但是,就你所指定的情况而言,最好保持原样。 - paxdiablo
谢谢 - 这很有道理。一开始我想做这样的事情:if (x == "val1"|| "val2") { alert('Hello World'); },但它没有起作用,这让我感到惊讶,所以我觉得可能是我忽略了一些允许它的基本语法规则。 - DDEX
3个回答

8

如果没有一些聪明(或不那么聪明)的编程技巧,你是做不到的,而且你真的不应该这样做。这段代码易读且非常简单。你可以缩短它,但很可能会变得难以阅读。不过你可以格式化它,使其看起来更好:

var x = foo;
if (x == "val1" || x == "val2") {
    alert('Hello World');
}

此外,建议在大多数情况下使用 === 而不是 == 。为什么,请阅读这里:Which equals operator (== vs ===) should be used in JavaScript comparisons? 当然,除非您需要检查20个不同的值。那么制作一个数组并使用indexOf(如strapro的答案所建议的)可能是一个不错的选择。

2

您可以使用正则表达式。

if (/^val[1-2]$/.test(x))
    alert("Hello World");

@Med 我使用正则表达式是因为在 OP 的问题中,它们是字符串而不是变量。 - styvane
是的,但如果不是 val1val2 而是 'verylongstring-simplified-toval1' 和 'verylongstring-again-simplified-to-val2' 呢? - Med

2

请问您可以再具体一些吗?简单一点的意思是什么? 让它变得更简单(或者说更易读)的一个方法是:

var acceptedValues = ["val1", "val2"];
var x = "foo"
if(acceptedValues.indexOf(x) >= 0){
    alert ('Hello World');
}

起初我想做这样的事情: if (x == "val1"|| "val2") { alert('Hello World'); } 但它并没有起作用,这让我感到惊讶,所以我认为我可能缺少了一些基本的语法规则。 - DDEX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接