逻辑运算的快捷方式

Raj*_*esh 2 javascript conditional-operator

我只是想知道,是否有逻辑运算符(&&||)的快捷方式。就像如果我想做类似的事情i = i + 10,我可以做i += 10

我搜索这个的原因是因为我有一个验证功能,它分为几个功能。下面是一个模拟:

function f1(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f2(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f3(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f4(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function validate(){
  var valid = true;
  valid = valid && f1();
  valid = valid && f2();
  valid = valid && f3();
  valid = valid && f4();
  
  console.log(valid);
}

validate();
Run Code Online (Sandbox Code Playgroud)

我试过&=

function f1(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f2(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f3(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f4(){
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function validate(){
  var valid = true;
  valid &= f1();
  valid &= f2();
  valid &= f3();
  valid &= f4();
  
  console.log(valid);
}

validate();
Run Code Online (Sandbox Code Playgroud)

现在这可以工作,因为true & false = 0并且0是假的,但这看起来更像是一个黑客,想知道是否有更好的方法来完成这样的任务?

笔记:

我试过了valid = f1() && f2() && f3 && f4();,但在这种方法中,如果有任何函数返回false,则不会执行后续函数。

编辑 1 - Nina 的建议

function f1(){
  console.log("f1");
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f2(){
  console.log("f2");
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f3(){
  console.log("f3");
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function f4(){
  console.log("f4");
  return Math.ceil(Math.random()*10) %2 === 0? true:false
}

function validate(){
  var valid = true;
  var validateFuncList = [f1,f2,f3,f4];
  valid = validateFuncList.every(function (f) { return f(); });
  console.log(valid);
}

validate();
Run Code Online (Sandbox Code Playgroud)

现在这是一个很好的答案,但是如果有人返回false,这将停止,这与valid = f1() && f2() && f3 && f4();

编辑 1

只是一个小更新。而不是做:valid = valid && func1()valid = func1() && validfunc1如果有效为 ,则第一种方法不会调用false

Nin*_*olz 5

也许你使用了一个数组。它调用所有函数。

function validate() {
    return [f1(), f2(), f3()].every(Boolean);
}
Run Code Online (Sandbox Code Playgroud)

或以数组作为参数

function validate(a) {
    return a.every(Boolean);
}

// call
xy = validate([f1(), f2(), f3()]);
Run Code Online (Sandbox Code Playgroud)