Выражение
testArray[0] == testArray[1] == testArray[2] == testArray[3]
выполняет ==
3 раза, слева направо.
((testArray[0] == testArray[1]) == testArray[2]) == testArray[3]
Первый раз, когда элементы массива равны, первый оценивается как true
:
((testArray[0] == testArray[1]) == testArray[2]) == testArray[3]
(true == testArray[2]) == testArray[3]
Если элементы являются числами, при следующем сравнении только вернется true
, если элемент равен 1:
console.log(true == 1);
console.log(true == 2);
console.log(true == 5);
Это связано с тем, что при использовании сравнения абстрактного равенства ==
, когда логическое значение сравнивается с числом, логическое значение сначала приводится к числу, а число c значение для true
равно 1.
console.log(Number(true));
Третье сравнение имеет ту же проблему.
Чтобы исправить это, вместо этого возьмите первое значение (или любое значение) и используйте .every
:
const oneVal = testArray[0];
return testArray.every(val => val === oneVal);