console.log(([][+[]]+[])[+!![]])
n //output
为什么这堆符号会输出n
无义务祭出 @justjavac 大大的神器: http://justjavac.com/javascript/2012/05/24/can-you-explain-why-10.html
另补充一副分解动作图:
拆解一下
> []
[]
> +[]
0
> [][0]
undefined
> [][+[]]
undefined
> undefined+[]
'undefined'
> [][+[]]+[]
'undefined'
> ![]
false
> !![]
true
> +!![]
1
> 'undefined'[1]
'n'
> ([][+[]]+[])[1]
'n'
> ([][+[]]+[])[+!![]]
'n'
推荐你看下这篇文章 jother编码
([][+[]]+[])[+!![]]
中先看最后一段[+!![]]
![]
为false,!![]
为true,前面加上+变成整数,[+!![]]
为1。
同理,[+[]]
为0,但[][+[]]
是undefined,+[]
后仍是undefined。'undefined'[1]
,得出n。