首先我们先来看两段简单的代码。
let a = 1;
let b = ++a;
console.log(a); //2
console.log(b); //2
let a = 1;
let b = a++;
console.log(a); //2
console.log(b); //1
从上面两个例子来看,如果是对于自增变量来说,两者之间是没有区别的。但是如果对于被赋值的变量来说,二者就产生差别,一个是成功赋值,一个则是赋值到自增前的值。
其实产生这种结果的原因,是因为如果我们在变量前面加++的时候,JS内部会对变量先进行自增,然后再对自增后的结果赋值给等号左边的变量。当我们把++放到变量后面的时候,JS内部则会先将目前的值赋值给等号的变量,再进行自增。
因此我们可以得到以下结论:++在变量前是先自增再赋值,++在变量后是先赋值再自增。
明白了++在变量前和变量后的区别后,让我们再来看两段代码。
let a = 1;
let b = 0;
let c = a +++ b;
console.log(c); //1
console.log(a); //2
console.log(b); //0
从上述代码中可以看出,若我们写连续三个+的时候,系统默认会把它解析为let c = a++ +b;因此是a先与b相加然后赋值给c,最后再自增。
若如果我们给三个+中间添加空格,则运算的结果却发生了改变,例子请看以下代码。
let a = 1;
let b = 0;
let c = a + ++b;
console.log(c); //2
console.log(a); //1
console.log(b); //1
从上述代码中,我们给+添加了空格,则结果就变成了b先自增然后再跟a相加最后赋值给c。