JS奇葩语法(二)

作者: 千锋HTML5学院 | 来源:发表于2020-09-14 11:54 被阅读0次

在你的浏览器控制台输入这一段代码

([][[]]+[])[+!![]]+([]+{})[!+[]+!![]]

猜猜看会得到什么结果?

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"

相关文章

网友评论

    本文标题:JS奇葩语法(二)

    本文链接:https://www.haomeiwen.com/subject/ylxzektx.html