Операндами бинарной операции '-' могут быть только числа, потому при вычитании строка '7' автоматически преобразуется в число 7.
Если одним из операндов бинарной операции '+' является строка, эта операция трактуется не как сложение чисел, а как конкатенация (склеивание) строк и второй операнд автоматически преобразуется в строку: число 1 превращается в строку '1' и на выходе получаем строку '17'.
На эти грабли наступают все. В отношении правил автоматического преобразования типов JavaScript - худший среди популярных языков.
P.S. Унарная операция '+' автоматически преобразует строку в число. Так что если ты напишешь:
console.log(1 + +'7'); // пробел между этими плюсами обязателен
, то получишь ожидаемое тобой 8.
И такое тоже сработает:
console.log(+'7' + 8 - 2);
JavaScript