为什么在JavaScript中这个表达式被评估为"a"?

Way*_*oor 7 javascript obfuscation types deobfuscation

我抓住了一些混淆的JavaScript代码.我试图理解它,并且这样做,我在控制台中输入了它的一部分.我不明白为什么

> ((!!+[]+"")[+!![]])
< "a"
Run Code Online (Sandbox Code Playgroud)

为什么在JavaScript中((!!+[]+"")[+!![]])等于"a"?还有其他一些代码片段可以获得其他字母吗?

我想这与自动铸造有关.

pom*_*ber 7

( ( !!+[] + "" ) [ +!![] ] )
( (  !!0  + "" ) [ +true ] )
( ( false + "" ) [ +true ] )
( (   "false"  ) [   1   ] )
(         "false"[1]       )
(            "a"           ) 
Run Code Online (Sandbox Code Playgroud)

还有其他一些代码片段可以获得其他字母吗?

您可以使用相同的概念来获取"true","false","undefined","NaN"中的所有字母......