I dint know many OO languages that don’t have a useless toString on string types.
Well, that’s just going to be one of those “it is what it is” things in an OO language if your base class has a toString()-equivalent. Sure, it’s probably useless for a string, but if everything’s an object and inherits from some top-level Object class with a toString() method, then you’re going to get a toString() method in strings too. You’re going to get a toString() in everything; in JS even functions have a toString() (the output of which depends on the implementation):
In a dynamically typed language, if you know that everything can be turned into a string with toString() (or the like), then you can just call that method on any value you have and not have to worry about whether it’ll hurl at runtime because eg. Strings don’t have a toString because it’d technically be useless.
Same is true for JavaScript’s namesake, Java; Object has a toString method, so everything but primitives (int, long, etc.) must have a toString method (and primitives sort of have one too in a roundabout way).
I think JavaScript’s toString also serves another function, namely to have some form of fallback when doing operations on what should be incompatible types. [] + "", for instance; JavaScript will call toString() to do type conversion when the nearest matching type is a String.
Well, that’s just going to be one of those “it is what it is” things in an OO language if your base class has a
toString()
-equivalent. Sure, it’s probably useless for a string, but if everything’s an object and inherits from some top-levelObject
class with atoString()
method, then you’re going to get atoString()
method in strings too. You’re going to get atoString()
in everything; in JS even functions have atoString()
(the output of which depends on the implementation):In a dynamically typed language, if you know that everything can be turned into a string with
toString()
(or the like), then you can just call that method on any value you have and not have to worry about whether it’ll hurl at runtime because eg.String
s don’t have atoString
because it’d technically be useless.Same is true for JavaScript’s namesake, Java;
Object
has atoString
method, so everything but primitives (int
,long
, etc.) must have atoString
method (and primitives sort of have one too in a roundabout way).I think JavaScript’s
toString
also serves another function, namely to have some form of fallback when doing operations on what should be incompatible types.[] + ""
, for instance; JavaScript will calltoString()
to do type conversion when the nearest matching type is aString
.