为什么这个布尔表达式不返回true?

时间:2015-01-27 07:22:56

标签: javascript

我正在用JavaScript实现一个tic-tac-toe游戏。为什么以下布尔语句不在if块内运行(不返回true)?

if("O" == "O" == "O") {
    console.log("player 'O' has won the game.");
}

这是因为"O" = "O"被评估为返回true。然后将true与返回"O"的{​​{1}}进行比较?

如果是这样,我如何比较false中索引0,3,6处的字符是否彼此相等?

更新代码。

["O", "O", "X", "O", "X", "O", "O"]

3 个答案:

答案 0 :(得分:0)

您应该为此编写两个单独的等级==检查:

if (smth[0] == smth[3] && smth[3] == smth[6] )

答案 1 :(得分:0)

保持代码更短,同时仍然(可以说)更容易阅读的一个技巧是检查三者的串联。即if (x[0]+x[3]+x[6] === "OOO") ...

您还可以通过以下方式检查双方:

if ("OOO/XXX".indexOf(x[0]+x[3]+x[6]) >= 0)

答案 2 :(得分:0)

  

这是因为" O" =" O"被评估为返回true。然后将true与" O"进行比较。返回false?

是。

在这种情况下只有三个项目,最简单的方法是使用a === b && b === c,但你可以创建一个辅助函数来检查无限数量项目的相等性:



function allEqual() {
  var argArray = Array.prototype.slice.call(arguments);

  return argArray.every(function(el) {
    return el === argArray[0];
  });
}

console.log(allEqual());
console.log(allEqual("O", "O", "O", "O"));
console.log(allEqual("X", "O", "O", "O"));
console.log(allEqual("O", "X", "O", "O"));
console.log(allEqual("O", "O", "O", "X"));