在你的浏览器控制台输入这一段代码
([][[]]+[])[+!![]]+([]+{})[!+[]+!![]]
猜猜看会得到什么结果?
image要想理解这个结果怎么出来的,需要你对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"
网友评论