Saludos Rubén
Aquí es donde se dice que JavaScript es debilmente tipado (lo puedes googlear), es decir, tiende a ser muy flexible en la definicion de sus varibles. Es decir, puede crear confusion a la hora de definir si esto es un numero o un caracter, JavaScript se amolda pero eso trae confusión. En otros lenguajes esto es estricto, por ejemplo: en Java tu le dices guarda esto: 20 y el te exige que definas ¿es numero o caracter? y asi se quedara. En JavaScript es mas... permisivo o debilmente tipado (como te diste cuenta). Cuando le colocaste el signo - el amoldo unos caracteres a numeros, pero a larga esto trae problemas. Claro para ello ya hay una solución pero no nos adelantemos tanto. Con esto te explico un poco el porque paso eso y te asomé cierta vulnerabilidad de este codigo. Pero bien por tu "experimentación" eso es muy bueno, se ve que quieres entender los detalles.
Aunque aquí piden que no nos salgamos de las orientaciones del curso, te recomiendo que visites los
Recursos para desarrolladoresde Mozilla Es el mapa de aprendizaje en el desarrollo web Frontend, esta en español y te aclarará todas tus dudas. Tenlo presente en tus marcadores o favoritos.
Por cierto, para romper con todas tu dudas visita la sección Gramatica y Tipos