Por que os dois primeros exemplos o resultado está correto e nos dois últimos exemplos dão um resultado “errado”?
A linguagem JavaScript é uma linguagem de tipagem dinâmica, isso significa que ela é uma linguagem flexível, a grosso modo, ela tenta fazer por conta própria o melhor que ela pode, para que o nosso programa não “quebre”. Como?
Um detalhe é que isso não é apenas por javascript ter tipagem dinâmica, mas sim por ter tipagem fraca, uma linguagem com tipagem dinâmica mas forte é Lua:
-- exemplo 1:
print("1" - 1) -- resultado: 0.
--exemplo 2:
print("1" - "1") -- resultado: 0.
-- exemplo 3:
print("1" + 1) // resultado: 2
-- exemplo 4:
print("1" - "A") // resultado: Erro
E como é que faz 1+1 das 11? você usa concatenação com ..:
-- exemplo 1:
print(1 .. 1) // resultado: 11
Isso de "1"+1 ser 11 é uma falha de desing do javascript que foi percebido tarde demais, então ela não faz "o melhor" ela só foi mal projetada mesmo