"But wait a minute, Assembly is not type safe!" But yes it is, just every type is a binary number. It's not Assembly's fault that you're trying to use binary numbers to print characters to the screen or point to regions of memory and somehow get the two mixed up.
https://www.destroyallsoftware.com/talks/wat
How about {} + [], is that deliberately zero, and why is addition not commutative in this case if it is allowed? Or {} + {}?
I think most people would infer type safety to mean that attempts to coerce types which are meaningless result in an error, not meaningless output, like the result of "string" - 1, or {} + "string" or {} + []. Otherwise your type system isn't going to stop you doing something insane by mistake, and is therefore not adding any safety.
{} + "string" or similar just shouldn't be allowed, and in most languages (let alone type safe ones), it is not.
Aggressive type coercion is not type safety. It does not prevent type errors. It just sweeps them under the rug.
5 - 'foo'
That's a type error. It's not a convenient shortcut for `NaN`. var a = 1;
a = "foo";
is not type safe.
Extremely minor potential nitpick: correct me if I'm wrong, but I think this sentence implies that Javascript is not type-safe, when it is indeed type-safe; it's just dynamically typed, and its type system gives meaning to all expressions (where that meaning is to signal an error in some cases).