Parce que la spécification indique explicitement de le faire.
Page 75. Notez la différence entre 11.6.1 les étapes 5 à 8 et 11.6.2 les étapes 5 à 7.
11.6.1 - décrit comment l'ajout de l'opérateur travaille
1-4
. ...
5
. Laissez lprim être ToPrimitive(lval).
6
. Laissez rprim être ToPrimitive(rval).
7
. Si le Type(lprim) est une Chaîne ou de Type(rprim) est une Chaîne, puis
7a
. De retour de la Chaîne qui est le résultat de la concaténation ToString(lprim), suivie par ToString(rprim)
8
. Retourner le résultat de l'application de l'opération d'addition à ToNumber(lprim) et ToNumber(rprim)
11.6.2 - décrit comment opérateur de soustraction œuvres
1-4
. ...
5
. Laissez lnum être ToNumber(lval).
6
. Laissez rnum être ToNumber(rval).
7
. Retourner le résultat de l'application de l'opération de soustraction à lnum et rnum
Résumé
En cas de plus si l'un des opérandes lorsqu'ils sont convertis en valeur primitive sans conseil d'un coup, devient une chaîne de la seconde, est converti en une chaîne de caractères trop. Dans le cas de la soustraction des deux opérandes sont convertis en nombre.