var a=12, b=5, str=''; // b-строки, a-символы
while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';
console.log(str);
можете указывать любое количество строк и символов.
while(b--) str += (b%2?'#.':'.#').repeat(a/2)+((a%2)?b%2?'#':'.':'')+'\n';
while(b--) //запускаем цикл b раз
str += //в котором за каждую итерацию добавляем в строку
(b%2?'#.':'.#').repeat(a/2) // если строка нечетная (тоесть процент от остатка равен 1, а 1 это true) '#.' - это кусок строки повторяем a-раз деленные на 2 т.к. в строке два символа. если четная то '.#' то же самое.
+((a%2)?b%2?'#':'.':'') // этот кусок кода только для нечетного количества символов если из будет 12 его можно вообще убрать.
+((a%2)?b%2?'#':'.':'') // если количество символов нечетное и строка нечетная то добавляется символ '#' если строка четная то символ '.' если же количество символов в строке четное, то добавляется пустая строка (тоесть ничего не добавляется) сделано это потому что .repeat повторяет целую строчку. пополам он ее не делит, проще говоря округляет число до целого как Math.floor.
Если что непонятно, почитайте про .repeat, тернарный оператор и цикл while