如果那么逻辑与&& ||

时间:2017-02-28 13:01:06

标签: javascript if-statement logic

有人可以向我解释或指出有关为何以下功能不起作用的文件吗?

var x = 1;
var y = 2;
var z = 1;

function logicTest() {
  if ((x && y && z) === 1) {
    return true;
  } else {
    return false;
  }
}

console.log(logicTest())

我知道我可以按照以下方式输入:

var x = 1;
var y = 2;
var z = 1;

function logicTest() {
  if (x === 1 && y === 1 && z === 1) {
    return true;
  } else {
    return false;
  }
}
console.log(logicTest())

但我真的想要理解为什么第一个不起作用,以及是否有更好的方法来输入第二个if / then语句,或者这是否总是必须如此。

谢谢!

1 个答案:

答案 0 :(得分:2)

表达式

((x && y && z) === 1)

首先涉及(x && y && z)的评估。为了评估这一点,JavaScript依次测试xyz的值。如果从左到右,当强制转换为布尔值时,其中一个值为false,则评估将以该(未强制)值作为整个值的值停止。否则,该子表达式的值将是z的值,因为它是&&序列中的最后一个子表达式。

在这种情况下,xyz都是非零数字,因此整体结果为1,因为z1

您似乎希望能够做的是测试一组子表达式是否都等于相同的值。正如您所发现的那样,只能通过明确的比较来确定。这也是可以通过创建一个列表然后使用数组函数来执行测试来完成的,当有超过三个子表达式要测试时,这将非常有用。

另外,在文体上:

function logicTest() {
  if (x === 1 && y === 1 && z === 1) {
    return true;
  } else {
    return false;
  }
}

使用===之类的关系运算符执行测试会生成布尔值。使用它更简洁:

function logicTest() {
  return x === 1 && y === 1 && z === 1;
}