- cross-posted to:
- programmer_humor@programming.dev
- cross-posted to:
- programmer_humor@programming.dev
[🌽].pop() == 🍿
"🚴".push() = "🚲🤸"
"☹️".reverse() == "☹️"
You’re no fun
Look closer at the beauty mark, I flipped the emoji
wasn’t it
🙁
.
r
e
v
e
r
s
e
()"
🙂
"
.
r
e
v
e
r
s
e
(
)
=
"
🙃
"
Then “b” backwards would have to be “d”
"E".reverse() == "∃"
Be the operator overload you wish to see in the world
“:-)”.reverse() == “)-:”
Close enough
Also, it should turn an error into an empty but successful call. /s
Calling
reverse()
on a function should return its inverseisprime.reverse(True) // outputs 19 billion prime numbers. Checkmate, atheists.
It’s a just a joke, but I feel like that actually says something pretty profound about duck typing, and how computable it actually is.
"🐈".concat() = "😼"
but
"🙂".reverse() == "🙃"
Best I can do is
"\ude41🙂".split("").reverse().join("")
returns
"\ude42🙁"
JavaScript taking notes
You could implement that on a chat, but I wouldn’t do that on a string
Where’s your sense of adventure?!
Today I found out that this is valid JS:
const someString = "test string"; console.log(someString.toString());
Everything that’s an
Object
is 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
String
is 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 newString
object 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 thatsomeString
is coerced into aString
instance, 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 underlyingstring
primitive and not theString
instance itself:Why? Fuckin beats me, I honestly can’t remember what the point of returning the primitive instead of the
String
instance 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.