加号操作符

问题

请问下面这行代码的执行的结果?

 ++[[]][+[]]+[+[]] 

第一眼看到这个很可能是懵逼的,这是个什么玩意儿,能执行吗?

第一个要点:
+[] = ?

firefox测试运算结果.png

重点来了: +"" = 0

根据周爱民老师《JavaScript语言精髓与编程实践》,单个加号作为运算符在JavaScript中有三种作用。

  1. 标识字符串连接
  2. 表示数字取正值的一元运算符
  3. 表示数值表达式的求和运算。

加号在对数字取正值时,如果后面接的数据不是数字,那么会进行强制类型转换。

所以表达式++[[]][+[]]+[+[]]可以简化为
++[[]][0]+[0]
在这里++[[]][0]=+(+[[]][0]+1) = +(0+1) = 1
然后再次简化为
1+[0]=1+"0" = 10

加号运算符的另外一条规则是如果表达式中存在字符串,则优先按照字符串连接进行运算。所以数字1和字符串"0"相加,得到的结果是字符串"10"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容