> And in JS, s * n and n * s return NaN for any non empty string s and any number n ("" * n returns 0).
No? It is easy to verify that `"3" * 4` evaluates to 12. The full answer is that * converts its operands into primitives (with a hint of being number), and any string that can be parsed as a number converts to that number. Otherwise it converts to NaN.
Ah indeed, thanks for the correction, I edited message.