Судя по этой конструкции:
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.
В вашем случае в коде довольно сложно разобраться, поэтому исправить вашу проблему затруднительно. Скорее всего лучше будет писать заново большую часть. Советую обратить внимание на правописание англоязычных переменных.