В общем-то все логично. Операция "+" может быть произведена со строками и производится с ними. Операция "-" - только с числами и потому строки интерпретируются как число. Два плюса (A + + B) снова подразумевают минимум одну операцию с числами, поэтому + + '5' - прокатывает, а + + 'foo' - закономерно выдает NaN.
Но все это не более чем разминка для ума, как и навороченное разыменовывание указателей в C или игры с навороченными регулярками в Perl. В нормальном коде людям обычно не лень привести типы вручную.
ТАК, ЧТО ТАМ У НАС ТВОРИТСЯ В ЗАХВАТЫВАЮЩЕМ МИРЕ ВЕБ-КОМИКСОВ?.. £91 ^ С. У Д и у \ /1 / ОЛИН ЧЕЛОВЕК РОПСЕНШТИЛЬС/ Я, КАЖЕТСЯ, ПОЗНАЛ ТЩЕТУ БЫТИЯ. ПИСТОЛЕТ В СЛИВНОМ _БАЧКЕ.
Но все это не более чем разминка для ума, как и навороченное разыменовывание указателей в C или игры с навороченными регулярками в Perl. В нормальном коде людям обычно не лень привести типы вручную.