加号操作符

2017-09-11  本文已影响14人  积微微微

问题

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

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

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

第一个要点:
+[] = ?

firefox测试运算结果.png

重点来了: +"" = 0

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

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读