Sí, javascript es un lenguaje de tipado débil. ¿Qué significa esto? que nosotros nunca definiremos si lo que está dentro de una variable es un dato de tipo string por ejemplo, y únicamente de tipo string provocando que no pueda ser operado (a menos que llames a la función correspondiente para transformarlo en otro tipo de dato).
Javascript lo que hace es transformar automáticamente las variables según el operador a utilizar.
Lo que pasa es que al utilizar el operador matemático de suma con un número y un string lo que hace javascript es una concatenación, en cambio cuando haces una multiplicación, este mismo internamente transforma tu string en número para poder tratarlo como número y poder multiplicarlo.
En otros lenguajes como C o Java esto no pasa, ya que son de tipado fuerte y somos nosotros quienes debemos definir el tipo de variable (float, int, string, double, etc).
Aquí puedes leer más respecto al tema: https://www.estudioyobo.com/blog/2020/06/tipado-debil-vs-tipado-fuerte/