Conversão de tipo automático em JavaScript

As seguintes expressões todas em JavaScript são bem óbvias.

var x = 10 + 10;

O valor dex é20.

x = 10 + '10';

O valor dex neste caso é1010 porque o+ operador está sobrecarregado. Se algum dos operandos for do tipo string, será feita a concatenação de strings e se todos os operandos forem números, a adição será executada.

x = 10 - 10;
x = 10 - '10';

Em ambos os casos, o valor dex será0 porque o- operador não é sobrecarregado dessa forma e todos os operandos são convertidos em números, se eles não estiverem antes da subtração real ser executada (você pode esclarecer, se de qualquer maneira eu estiver errado).

O que acontece na seguinte expressão.

x = '100' - -'150';    

O valor dex é250. Que também parece ser óbvio, mas esta expressão parece ser o equivalente à seguinte expressão.

x = '100' +'150';

Se tivesse sido o caso, essas duas cadeias teriam sido concatenadas e atribuídas100150 parax. Então, por que a adição é executada neste caso?

EDITAR:

+'10' + 5 devolve15 e'a' + + 'b' devolveaNaN. Alguem sabe por quê?

questionAnswers(5)

yourAnswerToTheQuestion