Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查3个值是否与if语句相同_Javascript_If Statement - Fatal编程技术网

Javascript 检查3个值是否与if语句相同

Javascript 检查3个值是否与if语句相同,javascript,if-statement,Javascript,If Statement,我正在构建一个Tic-Tac-Toe游戏,我想知道这个语法是否有效。看起来程序有时运行正常,有时运行不正常,所以我想听听你的意见 If ( (spacesArray[0] && spacesArray[1] && spacesArray[2] == (userDraw || compDraw))){ } 所以基本上,我检查数组中的位置0,1,2,如果它们有相同的值(“x”或“o”)。这个语法正确吗 **编辑 对于任何想在这里看到完整项

我正在构建一个Tic-Tac-Toe游戏,我想知道这个语法是否有效。看起来程序有时运行正常,有时运行不正常,所以我想听听你的意见

If ( (spacesArray[0] &&
      spacesArray[1] &&
      spacesArray[2] == (userDraw || compDraw))){
  }
所以基本上,我检查数组中的位置0,1,2,如果它们有相同的值(“x”或“o”)。这个语法正确吗

**编辑

对于任何想在这里看到完整项目的人来说,它就是。
首先,它是
if
,而不是
if
,其次,不,这不是正确的语法。每个测试必须完整且独立于其他测试,如:

if (spacesArray[0] == (userDraw || compDraw) &&
    spacesArray[1] == (userDraw || compDraw) &&
    spacesArray[2] == (userDraw || compDraw)){
}
但是,在您的情况下,这些都不是必需的,因为您首先执行的测试是错误的。您应该检查
spacesArray
中的所有3个元素是否都是相同的值,这意味着它们都是“X”或“O”,这可以通过方法最有效地完成

函数allX(当前值){
返回currentValue==“X”;
}
函数allO(当前值){
返回currentValue==“O”;
}
var spacesArray1=[“X”、“O”、“O”];
var spacesArray2=[“X”、“X”、“O”];
var spacesArray3=[“X”,“X”,“X”];
var spacesArray4=[“O”,“O”,“O”];
log(spacesArray1.every(allX),spacesArray1.every(allO));
log(spacesArray2.every(allX),spacesArray2.every(allO));
log(spacesarray 3.every(allX),spacesarray 3.every(allO));
log(spacesarray 4.every(allX),spacesarray 4.every(allO));
//因此,要测试tic-tac-toe:
功能测试(播放器){
if(spacesarray 3.every(allX)| | spacesarray 3.every(allO)){
控制台日志(玩家+“赢!”);
}否则{
log(“还没有!”);
}
}

测试(“斯科特”)首先,它是
if
,而不是
if
,其次,不,这不是正确的语法。每个测试必须完整且独立于其他测试,如:

if (spacesArray[0] == (userDraw || compDraw) &&
    spacesArray[1] == (userDraw || compDraw) &&
    spacesArray[2] == (userDraw || compDraw)){
}
但是,在您的情况下,这些都不是必需的,因为您首先执行的测试是错误的。您应该检查
spacesArray
中的所有3个元素是否都是相同的值,这意味着它们都是“X”或“O”,这可以通过方法最有效地完成

函数allX(当前值){
返回currentValue==“X”;
}
函数allO(当前值){
返回currentValue==“O”;
}
var spacesArray1=[“X”、“O”、“O”];
var spacesArray2=[“X”、“X”、“O”];
var spacesArray3=[“X”,“X”,“X”];
var spacesArray4=[“O”,“O”,“O”];
log(spacesArray1.every(allX),spacesArray1.every(allO));
log(spacesArray2.every(allX),spacesArray2.every(allO));
log(spacesarray 3.every(allX),spacesarray 3.every(allO));
log(spacesarray 4.every(allX),spacesarray 4.every(allO));
//因此,要测试tic-tac-toe:
功能测试(播放器){
if(spacesarray 3.every(allX)| | spacesarray 3.every(allO)){
控制台日志(玩家+“赢!”);
}否则{
log(“还没有!”);
}
}

测试(“斯科特”)我认为,当你把
spacesArray[0]
单独放进去时,它会检查它是真是假

您可能要尝试:

if((spacesArray[0]==(userDraw | | compDraw)&&
spacesArray[1]==(userDraw | | compDraw)&&
spacesArray[2]==(userDraw | | compDraw))){

}

我想,当你把
空间数组[0]
单独放进去时,它会检查它是真是假

您可能要尝试:

if((spacesArray[0]==(userDraw | | compDraw)&&
spacesArray[1]==(userDraw | | compDraw)&&
spacesArray[2]==(userDraw | | compDraw))){

}

首先验证答案之间是否相等,最后验证答案是否为O或X

if ( spacesArray[0] == spacesArray[1] &&
    spacesArray[0] == spacesArray[2] &&
    spacesArray[0] == (userDraw || compDraw))

首先验证答案之间的相等性,最后验证其是否为O或X

if ( spacesArray[0] == spacesArray[1] &&
    spacesArray[0] == spacesArray[2] &&
    spacesArray[0] == (userDraw || compDraw))

我会单独检查一下是
userDraw
还是
compDraw
,这样你就可以知道谁赢了。此外,出于javascript古怪的平等性原因,请使用
===
而不是
==

// destructure array
const [a, b, c] = spacesArray;

// check if a is not null or undefined
// check if a and b are equal
// check if a and c are equal
if (a && a === b && a === c) {
  // all 3 are the same value      

  // check if userDraw wins
  if (a === userDraw) {
    console.log(`${userDraw} wins`;
  }

  // check if compDraw wins
  if (a === compDraw) {
    console.log(`${compDraw} wins`;
  } 
}
**详细说明
|
在这种情况下不起作用的原因。**

设置:

const userDraw = 'x';
const compDraw = 'y';
const spacesArray = ['y', 'y', 'y'];

// (userDraw || compDraw) will be 'x'
案例:

if (spacesArray[0] &&
  spacesArray[1] &&
  spacesArray[2] == (userDraw || compDraw)
if (spacesArray[0] === spacesArray[1] &&
  spacesArray[0] === spacesArray[2] &&
  spacesArray[0] === (userDraw || compDraw))
以下是它失败的地方:

if ('y' && // -> true
  'y' && // -> true
  'y' === 'x') // -> false
spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false
案例:

if (spacesArray[0] &&
  spacesArray[1] &&
  spacesArray[2] == (userDraw || compDraw)
if (spacesArray[0] === spacesArray[1] &&
  spacesArray[0] === spacesArray[2] &&
  spacesArray[0] === (userDraw || compDraw))
以下是它失败的地方:

if ('y' && // -> true
  'y' && // -> true
  'y' === 'x') // -> false
spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false

我会单独检查一下是
userDraw
还是
compDraw
,这样你就可以知道谁赢了。此外,出于javascript古怪的平等性原因,请使用
===
而不是
==

// destructure array
const [a, b, c] = spacesArray;

// check if a is not null or undefined
// check if a and b are equal
// check if a and c are equal
if (a && a === b && a === c) {
  // all 3 are the same value      

  // check if userDraw wins
  if (a === userDraw) {
    console.log(`${userDraw} wins`;
  }

  // check if compDraw wins
  if (a === compDraw) {
    console.log(`${compDraw} wins`;
  } 
}
**详细说明
|
在这种情况下不起作用的原因。**

设置:

const userDraw = 'x';
const compDraw = 'y';
const spacesArray = ['y', 'y', 'y'];

// (userDraw || compDraw) will be 'x'
案例:

if (spacesArray[0] &&
  spacesArray[1] &&
  spacesArray[2] == (userDraw || compDraw)
if (spacesArray[0] === spacesArray[1] &&
  spacesArray[0] === spacesArray[2] &&
  spacesArray[0] === (userDraw || compDraw))
以下是它失败的地方:

if ('y' && // -> true
  'y' && // -> true
  'y' === 'x') // -> false
spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false
案例:

if (spacesArray[0] &&
  spacesArray[1] &&
  spacesArray[2] == (userDraw || compDraw)
if (spacesArray[0] === spacesArray[1] &&
  spacesArray[0] === spacesArray[2] &&
  spacesArray[0] === (userDraw || compDraw))
以下是它失败的地方:

if ('y' && // -> true
  'y' && // -> true
  'y' === 'x') // -> false
spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false

你的意思是相同的值。所以你需要检查的第一件事是3项是相等的

当三个值相等时,您只需检查其中一个值相等
userDraw
compDraw
即可

这样吧。您可以使您的
if
语句运行得更快,因为当第一个或第二个条件失败时,javascript引擎不会检查保留条件

if (spacesArray[0] === spacesArray[1] &&
    spacesArray[0] === spacesArray[2] &&
    (spacesArray[0] === userDraw || spacesArray[0] === compDraw) )

编辑:我正在检查密码笔,注意到了。如果您选中
spacesArray[0]==(userDraw | | compDraw)
,这将是一个错误。因为
(userDraw | | compDraw)
将始终返回userDraw

您的意思是相同的值。所以你需要检查的第一件事是3项是相等的

当三个值相等时,您只需检查其中一个值相等
userDraw
compDraw
即可

这样吧。您可以使您的
if
语句运行得更快,因为当第一个或第二个条件失败时,javascript引擎不会检查保留条件

if (spacesArray[0] === spacesArray[1] &&
    spacesArray[0] === spacesArray[2] &&
    (spacesArray[0] === userDraw || spacesArray[0] === compDraw) )

编辑:我正在检查密码笔,注意到了。如果您选中
spacesArray[0]==(userDraw | | compDraw)
,这将是一个错误。因为
(userDraw | | compDraw)
将始终返回userDraw

不,只需写3次,编程很简单,不需要过于复杂,因为所有的值都需要相同的游戏。我想我可以用这种方式简化它