Question: If you try to run following code you will see that  

`(![]+[])[+1]` returns "a";  

`(![]+[])[+2]` returns "l";  

`(![]+[])[+3]` returns "s".  

And so on.
Why?

Answer: 
Let's break it down piece by piece.

```
> ![]
false

```

Array literals are truthy even when empty, so the negation is boolean false.

```
> ![]+[]
"false"

```

Adding a boolean (the false from above) to an empty array results in the string version of `"false"`, thanks to JS's strange rules for adding arbitrary objects.

```
> (![]+[])[1]
"a"
> (![]+[])[3]
"s"
(etc)

```

is equivalent to:

```
> "false"[1]
"a"
> "false"[3]
"s"

```

and so on -- indexing a string returns the character at that index.

Finally,

```
> +[]
0

```

so

```
> "false"[+[]]
"f"

```

and putting it all together:

```
> (![]+[])[+[]]
"f"

```
You're indexing the result of the first expression as a string.

(![]+[]) => false

false[1] => "false"[1] => a