elem.innerHTML при установке значения отрендерит строку как html код, предыдущее содержимое элемента будет удалено, не работает на текстовых нодах и нодах комментария
elem.innerText при установке значения заменит содержимое строкой, как текстом, спецсимволы выведутся корректно, не работает на текстовых нодах и нодах комментария
2 этих свойства нестандартные, но поддерживаются всеми браузерами
elem.textContent установит содержимое любой ноды (неуверен насчет ноды документа), при установке работает как innerText, различия есть при чтении
elem.firstChild.nodeValue устанавливает текстовое содержимое только для текстовых нод, нод комментария и нод CDATA, не будет иметь эффекта, если первая нода другого типа, не затронит остальные дочерние ноды, выкинет ошибку, если элемент пустой (т.к. elem.firstChild будет null)