Hi,
I didn't know about TeaVM. This is the first time I hear about it. So everything I say here is drawn for 30 minutes of reading about TeaVM without trying it out.
Community
Even before talking about the technical comparison, I would highlight Scala.js' community. At first glance, it seems TeaVM has a
very small community: 14 threads on the mailing list, that's about
everything I could find. Scala.js has a very active community, notably
on Gitter [1]. The community also develops many very good libraries
besides just the compiler and the JDK, which help for front-end
development in general and client/server communications. The community and ecosystem is what makes a different between a usable compiler and something on top of which you can actually build a project.
Technical side
At a first approximation, on the technical side, I would say that Scala.js' major advantages over TeaVM will be related to the fact that Scala is much closer to JS than Java is. Scala.js' interop with JavaScript is very natural because of that. The double OO and Functional paradigms are shared, not to mention the tendency to use asynchronous stuff such as Promises/Futures. There is even js.Dynamic for dynamically typed interop with JS, which I doubt you can achieve in Java. Moreover, primitive data types such as Ints and Strings are represented directly as primitive JavaScript values, and there is no boxing when they are put in generic data structures, which helps interop and performance.
Performance-wise, I can't tell anything for real without explicit benchmarks of Scala.js vs TeaVM. But reasoning about it, I can say a few things, Scala.js supports the Scala standard library, and there are adaptations to it that make it more efficient on the JavaScript runtime (or make it work at all, in some cases), which you won't have if you use the Scala std lib with TeaVM. Scala.js also has a very good optimizer which is Scala-aware, so it will optimize Scala code much better than TeaVM ever could. In particular, higher-order methods are typically inlined away as while loops.
In general, Scala.js is tailored for Scala, and for JavaScript. You will get the most of your Scala with Scala.js.
True, you don't get to reuse Java source code directly. This is an unconditional advantage of TeaVM over Scala.js.
That's about all I can say with such short knowledge of TeaVM, I think. But if you have more specific questions, I can probably answer as well.
Cheers,
Sébastien
[1]
https://gitter.im/scala-js/scala-js