([][[]] + [])[+!![]] + ([] + {})[+!![] + +!![]]
![](https://i-blog.csdnimg.cn/blog_migrate/fd48084efe80a83eea63a0264452cd02.png)
开始分析:
1.([][[]] + [])
[][[]]这个表达式基本就是 一个数组[] 然后取这个数组的第几项[?] -> [][?]
那么自然要把在[[]]内的[]转成字符串 -> []转为字符串是个空字符串 -> [][''] -> 数组里没有这个元素
所以这部分得出结果为undefined
undefined + [] -> 一个原始类型 + 对象类型 -> 把对象转为原始类型 -> 为空字符串
undefined + ‘’ -> 'undefined'
'undefined'[+!![]]
2.[+!![]]
* 任何一个数据前加!!就相当于把这个数据转为布尔类型
[]本身的布尔判定自然是true -> [+true] -> true前+相当于把它转成数字 -> 1 -> [1]
'undefined'[1]
得出结论为'n'
![](https://i-blog.csdnimg.cn/blog_migrate/75e98d33181318eecb9da71ab8008275.png)
'n' +([] + {})[+!![] + +!![]]
3.([] + {})
两个对象相加 -> 把对象转成原始数据类型
[] -> ''
{} -> [object Object]
'' + [object Object] -> 结论 '[object Object]'
-------------------------------------
'n' +'[object Object]'[+!![] + +!![]]
-------------------------------------
4.[+!![] + +!![]]
+!![] -> 1 -> 1 + 1 -> 结论 2
-------------------------------------
'[object Object]'[2] -> 'b'
最终 'n' + 'b' -> 'nb'
![](https://i-blog.csdnimg.cn/blog_migrate/7ba9e92b2a601af66137f738a9132870.png)