Это базовые особенности языка. Объясняются в любом учебнике.
В джаваскрипт оператор "+" является двойственным. В зависимости от ситуации он может быть как оператором сложения (чисел), так и оператором конкатенации (склеивание строк).
Здесь оба операнда являются строками, поэтому знак плюс будет оператором конкатенации.
let s1 = '1';
let s2 = '2';
console.log(s1 + s2); // '12'
Здесь оба операнда являются числами, поэтому знак плюс будет оператором сложения.
let n1 = 1;
let n2 = 2;
console.log(n1 + n2); // 3
Могут быть ситуации, когда один из операндов будет числом, а другой – строкой.
В этом случае числовой операнд будет преобразован в строку
let s1 = '1';
let n2 = 2;
console.log(s1 + n2); // '12'
Когда вы получаете значения инпутов со страницы, они всегда будут строчного типа, во всех ситуациях. Поэтому, прежде чем выполнять над этими значениями математические операции, их нужно преобразовать в числа
parseInt()
- в целое число
parseFloat()
- в число с плавающей точкой
Number()
- можно еще так
+n2
- или так (это уже своего рода хак, основанный на приведении типов)
Number(element1.innerHTML) + Number(element2.innerHTML)
Все подробности здесь
https://learn.javascript.ru