怎么理解 {} + [] 与 ({} + []) 的结果?

在学习对象时,发现 {} + [] 的结果为 0 , 而 ({} + []) 的结果为 '[object Object]'。

只是一个有括号,一个没有括号,结果却完全不同,经过搜索和相关资料参考,我自己的理解是这样的:

因为JavaScript 本身的语法特性, {} 既可以表示一个代码块,也可以表示一个空对象,具体属性哪一种需要看代码执行环境。

 

{} + [] 这段代码中就是把 {} 解释成了一个代码块,那么 {} + [] 看起来像是一个运算,其实应该是分开来解析, {} 为一个代码块,  +[] 为一个表达式

所以 {} + [] 最终计算的是 +[] , 将一个空数组转换成正整数,结果为0.

 

({} + []) ,因为小括号里面为一个运算表达式,所以这里{}是作为一个空对象来解析的,空对象与空数组使用加号运算,实际是一个字符串连接操作,即

{}.toSting() + [].toString()

{}.toString() 的结果为 '[object Object]' , [].toString() 的结果为 ''

所以最终结果为:'[object Object]' 

 

posted @ 2018-04-28 16:01  Jsoner  阅读(264)  评论(0编辑  收藏  举报