首先为大家举两个栗子引出今天的问题:
let a = 1
console.log(a+++a)
//输出3
let a = 1
console.log(a+a++)
// 输出2
那么造成这两个结果差异的原因是什么呢?这就涉及到自增运算符 a++和++a的区别以及运算符的优先级了。
首先为大家解释a++和++a的区别:
let a = 1
console.log (b = ++a) // 输出结果为2 a为2
let a = 1
console.log(b = a++) //输出结果为1 a为2
因此我们可以得到如下结论:++a是在运算之前a+1已经完成,a++是需要在运算完成之后a+1才执行。
第二是关于运算符的优先级,可以参考MDN关于优先级的相关知识,常用的大致如下:
逗号(,) < 赋值(=) < 逻辑或(||) < 逻辑与(&&) < 相等判断(===) < 大小判断(>,<) < 加减 < 乘除 < typeof < 前置递减递增(++...) < 逻辑非(!...) < 后置递减递增 (...++) < new < 成员访问(x[y]或x.y) < 小括号
那么回归到最初我们讲述的栗子中:
let a = 1
console.log(a+++a)
/* a+++a中一共有三个“+”,根据优先级我们知道a++的优先级更高,
因此先得到a++的结果为1;之后a的值增加1,即为2;
因此a+++a的结果为3 */
let a = 1
console.log(a+a++)
/*运算从左往右开始,首先是a的值为1,因为a++之前并没有自增运算,因此在a++时,a的值仍然为1;
因此结果就是(1,1)相加,结果为2.*/
资料参考饥人谷前端体系课课程