int, rather than being a function, instanciates an object of type int.
int(5.5) for example creates an int-object out of a float which you pass to the constructor of the class int.
If you pass nothing, you'll get an empty int object, so to say, set to zero. You can do that with str (you'll get '') or bool(leads to False) as well.
Ah, so you mean, raising a TypeError in this case?
Aren't most languages throwing errors if you mix up types? The C's, Java...
JS seems to be a bit more lenient; which for me is rather confusing, like if a string doesn't even know that it is a string.
'Ah, there's a plus, so let's concat!'
'Ah, there's any other operator... let me reconsider... am I a number?'
EDIT: Ah, or are you talking about ASCII arithmetics, so to say?