事由
前几天有人在微博上发了一张图片(回微博找没找到了),说对于下面的运算较为困惑:
[]+{}=== {}+[] // true
{}+[]=== []+{} // false
({}+[]) === ([]+{}) // true
[]+{} // "[object Object]"
{}+[] // 0
({}+[]) // "[object Object]"
当时我看了题目之后,兴趣与疑心并存,并产生了强烈的好奇感,很奇怪的问题,不是吗?而且,它与eval('{a:1}')不会报错而eval('{“a”:1}')就会报错又有什么关系呢?疑点重重不是吗?
实验
带着好奇心,我在Chrome控制台做了一番实验,发现结果果然是这样!
但是就在我更疑惑不解的时候,我突然想起了一个问题,Chrome的控制台是用eval来执行的!于是,我马上在编译器里输入了一下测试代码,结果果然不出我所料:
[]+{}=== {}+[] // true
{}+[]=== []+{} // true
({}+[]) === ([]+{}) // true
[]+{} // "[object Object]"
{}+[] // "[object Object]"
({}&