++[[]][+[]]+[[]][+[]]+[+[]]==10

问题出现

最近在准备面试, 突然发现群里的老学长发来这么一句
++[[]][+[]]+[[]][+[]]+[+[]] == 10
一开始心里想的是我这老学长从来不按套路出牌,大概这个东西返回的是true吧,到chorme控制台打印一下还真的是true
这到底怎么回事呢?正好也累了,换换脑子,就开始了下面这一套…..

探究

Q1: 虽然表面上看起来天差地别,难道说是ascii码转化之后是相同的??
带着这个疑问我进行了下面的试验
不对啊,这明明都是返回的第一个字符的ascii码呀..方向错了
Q2: 这里面能不能分块解释一下?
看来还得仔细的分析分析,不能硬着头皮试了
尝试着把上面的表达式变成
++[[]][+[]] + [[]][+[]] + [+[]]
然后把他们在控制台上分别打印一下..
2333,好像发现了点什么东西
[+[]]是[0]啊,那就是+[] 变成了0, +运算符在+之前把[]变成了””空字符串然后+”” === 0
接着下面的就好解释了, [[]][+[]]就变成了[[]][0],就是[]呗,但是如果你直接执行++[]还是会报错的,但是这样便于理解++0(会报错) == 1, 所以第一项++[[]][+[]]就变成了1(number)
自然而然第二项 1 + [[]][+[]] 就变成了 1+”” === “1”
然后再加上最后一项 “1” + 0 === “10”
自然而然 “10” == 10

后记

转化来转化去还是考察的对运算符的理解,看来我理解还是不够深…一开始路线错误

++[[]][+[]]+[[]][+[]]+[+[]]==10
https://zhangfuli.github.io/2018/03/09/++[[]][+[]]+[[]][+[]]+[+[]]==10/
作者
张富利
发布于
2018年3月9日
许可协议