this post was submitted on 27 Aug 2024
219 points (94.3% liked)
Programmer Humor
35334 readers
1 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 6 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Everything that's an
Objectis going to either inheritObject.prototype.toString()(mdn) or provide its own implementation. Like I said in another comment, even functions have atoString()because they're also objects.A
Stringis anObject, so it's going to have atoString()method. It doesn't inheritObject's implementation, but provides one that's sort of a no-op / identity function but not quite.So, the thing is that when you say
const someString = "test string", you're not actually creating a newStringobject instance and assigning it tosomeString, you're creating astring(lowercases!) primitive and assigning it tosomeString:Compare this with creating a
new String("bla"):In Javascript, primitives don't actually have any properties or methods, so when you call
someString.toString()(or call any other method or access any property onsomeString), what happens is thatsomeStringis coerced into aStringinstance, and thentoString()is called on that. Essentially it's like goingnew String(someString).toString().Now, what
String.prototype.toString()(mdn) does is it returns the underlyingstringprimitive and not theStringinstance itself:Why? Fuckin beats me, I honestly can't remember what the point of returning the primitive instead of the
Stringinstance is because I haven't been elbow-deep in Javascript in years, but regardless this is whatString'stoString()does. Probably has something to do with coercion logic.