问题
请问下面这行代码的执行的结果?
++[[]][+[]]+[+[]]
第一眼看到这个很可能是懵逼的,这是个什么玩意儿,能执行吗?
第一个要点:
+[] = ?
重点来了: +"" = 0
根据周爱民老师《JavaScript语言精髓与编程实践》,单个加号作为运算符在JavaScript中有三种作用。
- 标识字符串连接
- 表示数字取正值的一元运算符
- 表示数值表达式的求和运算。
加号在对数字取正值时,如果后面接的数据不是数字,那么会进行强制类型转换。
所以表达式++[[]][+[]]+[+[]]
可以简化为
++[[]][0]+[0]
在这里++[[]][0]=+(+[[]][0]+1) = +(0+1) = 1
然后再次简化为
1+[0]=1+"0" = 10
加号运算符的另外一条规则是如果表达式中存在字符串,则优先按照字符串连接进行运算。所以数字1和字符串"0"相加,得到的结果是字符串"10"