Explanation: it’s mostly due to how js does type conversion. for the Ls, it’s
[] is an empty array ![] is treated as false combining a boolean with the empty array returns “false” as a string (so true + [] = “true”, false + [] = “false”) ! + [] is treated as true ! + [] + ! + [] is treated as 2 since true + true = 1 + 1 = 2 so you have “false”[2], which is l for the o it’s [] is an empty array [] + {} returns “[object Object]” as a string ({} + [] returns 0) ![] is false !![] is true +!![] casts it to an integer so that part is “[object Object]”[1], which returns “o”
The explanation is about as understandable as the JS code, however thanks OP, TIL
The line breaks haven’t worked, here’s it formatted correctly:
Explanation: it’s mostly due to how js does type conversion.
For the Ls, it’s:
for the o it’s:
Iirc this is called “JSFuck”, and it has a number of compilers
There’s a nice presentation that explains this behaviour quite understandable: https://youtu.be/sRWE5tnaxlI
Here is an alternative Piped link(s): https://piped.video/sRWE5tnaxlI
Piped is a privacy-respecting open-source alternative frontend to YouTube.
I’m open-source, check me out at GitHub.