Javascript 更简洁地编写if语句

Javascript 更简洁地编写if语句,javascript,Javascript,在JavaScript(和大多数其他编程语言)中,我注意到,当检查同一变量的多个条件并对每个条件执行相同操作时,很难简洁地编写if语句。在这样的场景中,是否可以更简洁地编写if语句 if(x==1|x==2|x==3){ //Is there any way to make this less verbose? console.log("X equals either 1 or 2 or 3!"); } //this isn't syntactically correct, but i

在JavaScript(和大多数其他编程语言)中,我注意到,当检查同一变量的多个条件并对每个条件执行相同操作时,很难简洁地编写if语句。在这样的场景中,是否可以更简洁地编写if语句

if(x==1|x==2|x==3){ //Is there any way to make this less verbose?
    console.log("X equals either 1 or 2 or 3!");
}

//this isn't syntactically correct, but it's more concise,
//and I wish it were possible to write it more like this
if(x==(1|2|3)){
    console.log("X equals either 1 or 2 or 3!");
}

您可以使用正则表达式:

if (/^(1|2|3)$/.test(x)) { ... }
您可以使用以下选项:

if ([1, 2, 3].indexOf(x) >= 0) { ... }
如果需要更复杂的相等性测试,可以定义自己的函数,并将其与内置的
some()
迭代器一起使用:

function match(value1, value2) { var result = . . .; return result; }

if ([1, 2, 3].some(match.bind(null, x))) { . . . }
bind
出现在JS 1.8.5中;如果需要向后兼容,可以使用:

if ([1, 2, 3].some(function(elt) {return match(x, elt);})) { . . . }


根据我的经验,大多数情况下,只要定义一个返回bool的方法,就可以使if语句更加简洁。这样,代码更可读,测试更容易,甚至可以重用更多的代码

当然,其他答案也很方便

请举一个例子:

if (password.length < 6 || ! /[0-9]/.test(password) || password == userName) {
    alert('password doesn\'t meet security standards!');
}
if(password.length<6 | |!/[0-9]/.test(password)| | password==用户名){
警报('密码不符合安全标准!');
}
vs

函数isSecurePassword(pw,用户名){
如果(password.length<6)返回false;
如果(/[0-9]/.test(password))返回false;
如果(密码==用户名)返回false;
返回true;
}
如果(!isSecurePassword(pw,用户名)){
警惕(……);
}

(通常情况下,您可能会有对象和方法,而不必传递变量)

是的,我经常想知道使用相同值的多个if语句的缩写

如果你有时间的话,我建议你探索一下JS的函数式编程结构。你可能会得到一个更优雅的解决方案

我脑子里想不出一个好的或好的说法,但“和”似乎是一个不需要动脑筋的词

var Cond = {
    'and': function(val, predicates) {
        return predicates.every( function(predicate) { return predicate(val) } );
    }
}

var predicates = [
    function(val) { return val > 40; }
    function(val) { return val < 45; }
    function(val) { return val === 42; }
];

console.log( Cond.and( 42, predicates ) );
var Cond={
“and”:函数(val、谓词){
返回谓词.every(函数(谓词){返回谓词(val)});
}
}
变量谓词=[
函数(val){return val>40;}
函数(val){return val<45;}
函数(val){return val==42;}
];
log(Cond.和(42,谓词));

我的例子非常蹩脚,但你应该很容易处理。

从“以简洁的表达或陈述为标志:没有所有的细节和多余的细节”(也不以使用的字符数量为准)的意义上来说,这很难“更简洁”@vaugham你有没有发现任何两位数的问题?在这个例子中,其中一个数字有两位数似乎是可行的:你的问题似乎被用作一种心理挑战,以提供各种详尽的答案。但我怀疑真正的答案是“否”@simon No,我实际上想找到一种方法,使用正则表达式(如下面的答案所示)编写不太详细的if语句(这样我就不需要编写大量冗余代码)可能是一个解决方案。你有这种方法的例子吗?我很想看看你找到的解决方案。@AndersonGreen我添加了一个例子:)是你想看的还是你对更具体的东西感兴趣?
function isSecurePassword(pw, userName) {
    if (password.length < 6) return false;
    if (/[0-9]/.test(password)) return false;
    if (password == userName) return false;

    return true;
}

if ( ! isSecurePassword(pw, userName)) {
    alert(..);
}
var Cond = {
    'and': function(val, predicates) {
        return predicates.every( function(predicate) { return predicate(val) } );
    }
}

var predicates = [
    function(val) { return val > 40; }
    function(val) { return val < 45; }
    function(val) { return val === 42; }
];

console.log( Cond.and( 42, predicates ) );