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