Why is this expression evaluating to "a" in JavaScript?

I have mastered some kind of confusing JavaScript code. I tried to figure it out, and having done that, I typed pieces of it in the console. I can’t understand why

> ((!!+[]+"")[+!![]])
< "a"

Why ((!!+[]+"")[+!![]])is equal "a"in JavaScript? Are there any other code snippets to get other letters?

I assume this is due to automatic casting.

+6
source share
5 answers
( ( !!+[] + "" ) [ +!![] ] )
( (  !!0  + "" ) [ +true ] )
( ( false + "" ) [ +true ] )
( (   "false"  ) [   1   ] )
(         "false"[1]       )
(            "a"           ) 

Are there any other code snippets to get other letters?

You can play with the same concept to get all the letters from "true", "false", "undefined", "NaN" ...

+6
source

JavaScript:

!!+[] // Is falsey. this is same for !!+0 or !!+""
false + "" // Is "false". as 5+"" is "5".

![] // Is falsey.
!false // Is true
+true //  Is equal to 1. +[] = 0, +false = 0

, ,

"false"[1] // Is "a"
+4

, , , , ,

[] + "" ""

(!!+[]) Boolean false. Boolean false "", false - .

, (!!+[]+"") "false" .

, JavaScript , , , .

, ((!!+[]+"")[+!![]]) , . (!!+[]+"")[+!![]], () String "false", [] "false". , +!![] - 1, "false"[1] "a".

, +!![] 1:

[] - , 0, true JavaScript ( " JavaScript " real " true" ), ! [] is false !![] true.

+true, true , 1. , +!![] 1, (), !

+4

, , JavaScript , . , , , JavaScript , . , ++, .

, +x , x. !x. :

// A: !!+[]+"" which is evaluated like !(!(+[]))+""
+[]       === 0
!0        === true
!true     === false
false+''  === 'false'

// B: +!![] which is evaluated like +(!(![]))
![]       === false
!false    === true
+true     === 1

A[B], 'false'[1] === 'a'.

MDN.

- , JavaScript ===, == .

+3

:

( !! +[] + "" ) [ +!![] ]
//   ^^^ 

+[] Unary plus on array literal, Number([]), 0. , 0.

( !! 0 + "" ) [ +!![] ]
//^^^^

!!0 !!Boolean(0)), false, 0 .

( false + "" ) [ +!![] ]
//^^^^^^^^^^^

false+"" - , "false"

"false" [ +!![] ]
//         ^^^^ 

!![] !!Boolean([]), true. true.

"false" [ +true ]
//        ^^^^^

+true Number(true), 1.

"false" [ 1 ]

, , a.

- Javascript Type Coercion . Type Coercion, ,

+2

All Articles