Day 90/100 (JS) [] + {} 空对象和空数
2021-01-17 本文已影响0人
赵国星
写在前面的话
今儿被空数组和空对象相加整懵了...
举个栗子
console.log({} + []);
这是啥?看不懂...
一个一个来
console.log({});
打印这个是
{}
console.log([]);
打印这个是
[]
没毛病,但俩加起来会打印出
[object Object]
观察到,第一个o小写,第二个O大写
为啥?
是因为+(加号运算符)
试着运行了下
上面同样的把{}当作区块语句的情况又会发生,不过这次所有的浏览器都会有一致结果,如果{}(空对象)在前面,而[](空数组)在后面时,前面(左边)那个运算元会被认为是区块语句而不是对象字面量。
所以{} + []相当于+[]语句,也就是相当于强制求出数字值的Number([])运算,相当于Number("")运算,最后得出的是0数字。
又因为是对象0,所以打印出Object
相比之下,反过来会比较纯粹
具体加号运算符的原理,在参考资料中比较详细了~
参考资料
https://segmentfault.com/a/1190000008038678