Что происходит в этом цикле?
// создаем стрелочную функцию, принимающую два параметра
const countChars = (str, char) => {
	// создаем переменные и присваиваим им значение 0
	let i = 0;
	let count = 0;
	// запускаем цикл с предусловием
	while (i < str.length) { // пока i меньше чем длина строки str
		// исполняем тело цикла

		// берем символ из строки str расположенный по индексу i и переводим в нижний регистр
		// берем символ из аргумента функции и переводим в нижний регистр
		if (str[i].toLowerCase() === char.toLowerCase()) { // сравниваем оба значения
			// если совпало увеличиваем счетчик на 1
			count = count + 1;
		}
		// перед новой итерацией цикла увеличиваем индекс на 1
		i = i + 1;
	}
// возвращаем из функции накопленный результат подсчета или начальное значение если совпадений не было
	return count;
};

let result = countChars('abba#abba#abba#', '#') // пример использования
console.log(result); // 3
Подсчет количества определенного символа в строке без учета регистра?