DarthJS
@DarthJS

Почему в условии «o» есть true в Javascript?

Ребята помогите понять почему так происходит.

Вот участок кода, результат можно посмотреть по ссылке ниже.
Я задаю услови, что если ячейка1 и ячейка2 и ячейка3 == "Х" должно говорить ты победил, но если в середину попадает буква "о", то оно тоже говорит ты победил, но "Х" == "о" false. Почему же так происходит?

this.rezult = function(){

this.arr2.forEach(function(arr, i, innerArr){

arr.forEach(function(val, j){


var wincomb = innerArr[i][j] && innerArr[i][j+1] && innerArr[i][j+2];
var wincomb2 = innerArr[i][j] && innerArr[i+1][j] && innerArr[i+2][j];
var wincomb3 = innerArr[i][j] && innerArr[i+1][j+1] && innerArr[i+2][j+2];

console.log(wincomb == "X" && innerArr[i][j] !== "o");

if(wincomb == "X"){

alert(' X wins!');

}
})

})

}



ссылка JSFiddle
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Interface
Судя по этой конструкции:
var wincomb = innerArr[i][j] && innerArr[i][j+1] && innerArr[i][j+2];

я так понимаю, вы расчитываете, что в переменной wincomb окажется "X". Однако, там окажется булева переменная, т.е. true/false. При этом false там будет, если каждый из этих:
innerArr[i][j];
innerArr[i][j+1];
innerArr[i][j+2];

элементов будет пустой строкой.
Затем вы сравниваете if(wincomb == "X"){
результат (булева переменная) со строкой, которая приведется также к булевой, а так как строка это "Х", то всегда будет приводиться к true.

В вашем случае в коде довольно сложно разобраться, поэтому исправить вашу проблему затруднительно. Скорее всего лучше будет писать заново большую часть. Советую обратить внимание на правописание англоязычных переменных.
Ответ написан
логику не проверял, но на сколько я знаю оператор !== в JavaScript отсутствует, один символ "=" уберите
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы