Если совсем в двух словах. Интерпретатор делает не то, что мы от него хотим, а то, что мы от него запросили. А знаком "плюс" в JS можно запросить две разные операции.
Одна — это склеивание строк:
"aaa" + "bbb" = "aaabbb"
Вторая — это арифметическое сложение:
333 + 222 = 555
В остальной арифметике — деление, вычитание и т.п. — такой двойственности нет. Нельзя, например, вычесть одну строку из другой:
"aaa" - "bbb" = ?
, поэтому для строк при использовании знака "минус" JS автоматически приводит строку к числу и мы получаем ожидаемый результат:
"333" - "222" = 111
Но для знака "плюс" такое не работает, т.к. интерпретатор не знает, что нам
нужно, и делает то, что ему
сказали:
333 + 222 = 555
"333" + "222" = "333222"
Поэтому приведение строки к числу должны запросить мы сами явно. Для этого мы и вызываем функцию
parseInt()
, которая делает такое приведение, т.е. превращает строку в число.