js 转化为实体符_JS奇葩语法(二)

0b9a00debf1081a99d247754bd64c4b9.png

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

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

猜猜看会得到什么结果?

d739a7c93d4e60883dbe83bffd0c2d30.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
千锋HTML5学院:大前端学习路线图(附视频及源码)​zhuanlan.zhihu.com
107a9e97332631137678597485655ee0.png
千锋HTML5学院:如何用js检测浏览器类型​zhuanlan.zhihu.com
b68f16ebccb910a27ecc5880849d8268.png
千锋HTML5学院:JS栈结构的简单封装​zhuanlan.zhihu.com
7342608e606b8b31467da8b18ee83470.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值