![0b9a00debf1081a99d247754bd64c4b9.png](https://i-blog.csdnimg.cn/blog_migrate/bb71ae8f54ba41d87d36653ec1f6d842.png)
在你的浏览器控制台输入这一段代码
([][[]]+[])[+!![]]+([]+{})[!+[]+!![]]
猜猜看会得到什么结果?
![d739a7c93d4e60883dbe83bffd0c2d30.png](https://i-blog.csdnimg.cn/blog_migrate/82ea9a625d6e8b142e9ee331aebc9468.png)
要想理解这个结果怎么出来的,需要你对JS各种类型的转换非常熟悉才行。
我们试着解析一下这个语法。
上文中的代码分为两部分 xxx + xxx
所以它们分别代表“n”和“b”
我们先看第一个字母
( [] [ [] ] + [] ) [ +!![] ]
转化
( [] [ [].toString() ] + [].toString() ) [ +!![] ]
解析
结果
( [] [ "" ] + "" ) [ +!![] ]
第2次转化
( undefined+"" )[ +!![] ]
结果
"undefined"[ +!![] ]
第3次转化
"undefined"[ +!!true ]
结果
"undefined"[+true]
再转化
"undefined"[1]
最终结果
"n"
然后我们再来看第二个字母
( [] + {} )[ !+[] + !![] ]
转化
( [].toString() + {}.toString() )[ !+[] + !![] ]
结果
(""+"[object Object]")[!+[]+!![]]
结果
"[object Object]"[!+[]+!![]]
转化
"[object Object]"[!+[].toString() + !![].toString() ]
结果
"[object Object]"[!+"" + !!true ]
结果
"[object Object]"[!+"" + true ]
结果
"[object Object]"[!0 + true]
结果
"[object Object]"[true + true]
结果
"[object Object]"[1 + 1]
结果
"b"
千锋HTML5学院:一道奇怪的JS面试题(一)zhuanlan.zhihu.com
![318f82851f56d49f2258cf7f5db50f6b.png](https://i-blog.csdnimg.cn/blog_migrate/94627da9d187257dfe516760af7d8909.png)
![107a9e97332631137678597485655ee0.png](https://i-blog.csdnimg.cn/blog_migrate/89370b64b7ad9969ad514f4b67cc23fc.png)
![b68f16ebccb910a27ecc5880849d8268.png](https://i-blog.csdnimg.cn/blog_migrate/a40695cecbda5421be4937125bb69000.jpeg)
![7342608e606b8b31467da8b18ee83470.png](https://i-blog.csdnimg.cn/blog_migrate/f8bc4992b428a3e2755d399d228f887c.png)