JavaScript is a fun language that allows you to write crazy AND valid code.
Keep in mind that adding [] converts the expression to a String, for example:
[] + [] === ""
Getting true and false is easy, preceding something with ! converts it to Boolean (in our case, false), and negating the whole construct again gives us true.
![] === false
!![] === true
Using the same way of thinking, preceding with + converts to Number.
+[] === 0
+!+[] === 1
Let’s do some math.
+!+[] + +!+[] === 2
+[+!+[] + [+!+[]]] === 11
+[+!+[] + +!+[] + +!+[] + [+!+[]]] === 31
A string can be used as an array of characters by using this notation:
"this is a string"[0] === "t"
NaN is easy to get too.
+[![]] === NaN
{} + {} === NaN
Also, making multiple digits is simple if we’re concatenating multiple strings, then convert it to a number:
+("1" + "2") === 12
Now we can combine stuff and get the letter a:
![] === false
![] + [] === "false"
+!![] === 1
------------------------
(![] + [])[+!![]] === "a" // the same result as "false"[1]
There are cool ways to get all the letters of the alphabet.
Now, what will be the result of the expressions below:
{} + []
[] + {}
{} + [] === [] + {}
+{} + []
+{} + +[]
[][[]]
[][[]] + []
[][[]] == [][[]] + []
[][[]] === [][[]] + []
JavaScript is fun, isn’t it?