Breaking down the expression into the correct order of operations, you have:
(!(+[])) + (!(+[]))
First things first, []
is cast to a number by +
, which results in 0
. Don’t ask me why, it just does :p Probably buried in the specification somewhere.
!0
is simply true
So you end up with true + true
, which again casts to numbers, resulting in 1 + 1 = 2
To get nine, you’d need nine repetitions:
!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[] == 9
1
solved What is !+[]+!+[] in javascript? [closed]