Nejde o rigidní matematiku, ale o konzistentní sémantiku. Pokud nějaký operátor má jiný VÝZNAM pro typ A a jiný pro typ B, tak to není dobře. Jestli o tom pochybuješ, užij si, kam to vede, v JavaScriptu 
V JS chvili delam, ale na tento konkretni problem jsem snad nenarazil. Jako jo, pretypovani je zajimave
let thisIsNumber = +"1";ale zatim to nikdy nevedlo k chybe. Nebo je rec o retezeni vs scitani? Pokud si nejsem jisty vstupnimi daty, tak je pretypuji/parsuji, pokud si vstupem jisty jsem (drtiva vetsina kodu), tak nemusim delat zadne opicky. Jako jiste, parkrat jsem zapomnel poresit typ z parametru v URL a to jsem se pak divil, protoze
"0" === 0jaksi nefunguje. Nevim, mozna je to i tim, ze + pro retezeni pouzivam minimalne, protoze davam prednost
template strings (zvyk ze Scaly):
let text = `${name}: ${value}`;Plus obcas pouziji i
_.template a tam take neni problem s nejednoznacnym +.
a = _.template('x<%=a%><%=b%>y');
a({a:1, b:1}); // "x11y"