операции сравнения в JS выполняются подвое, слева направо.
это значит, что сначала в if-выражении выполнится сравнение первых двух элементов
board[0][0] === board[0][1]
, после чего, полученное значение (
true
или
false
) будет сравниваться с оставшимся элементом.
board[0][0] === board[0][1] /* 1 этап: получили true */
true === board[0][2] /* 2 этап: получили false, т.к true сравнивается с "x" */
чтобы всё работало так, как задумано, нужно воспользоваться оператором
&&
:
if (board[0][0] === board[0][1] && board[0][1] === board[0][2]) { ... }
или же, для улучшения читаемости кода, можно добавить функцию:
const isEqual = (value, ...values) => values.every(el => el === value);
/* 1 параметр (value) - это значение, с которым будут сравниваться все остальные переданные в функцию значения */
isEqual(board[0][0], board[0][1], board[0][2]) // true
isEqual(7, 7, 7, 7, 7, 7, 6) // false
isEqual(1, 1, 1, 1, 1, 1) // true