运算符i++表示先赋值
二者不同原因: 因为 ++ 优先级比 = 高,所以 i++ 是将自身的值赋给变量后+1
- var a=i++; 是将自身的值赋给变量,之后自身再加1
- var a=++i;是将自身+1 后的值赋给变量,同时自身加1;
后缀递增运算符,递增运算符 ++ 有更高的优先级。这意味着在表达式中,++ 将首先执行,然后才是赋值运算符 =。例如:
let a = 5;
let b = a++;
console.log(a); // 输出 6,a 先自增,然后赋值给 b
console.log(b); // 输出 5,b 接收的是 a 自增前的值
不同: i++ 是将自身的值赋给变量,之后自身再加1 ++i 是将自身+1 后的值赋给变量
相同:自身都是加1
++i 是前缀递增运算符,它也有更高的优先级,与 i++(后缀递增运算符)类似。前缀递增运算符将在表达式中首先执行,然后返回递增后的值。这与后缀递增运算符 i++ 不同,后缀递增运算符首先返回变量的当前值,然后再执行递增操作。
let i = 5;
let result = ++i;
console.log(i); // 输出 6,i 先自增,然后赋值给 result
console.log(result); // 输出 6,result 接收的是 i 自增后的值
前缀递增运算符直接修改变量的值,然后返回修改后的值。
扩展
var a = 2, b = 3;
var c = a +++ b;
console.log('a',a,'b',b,'c',c) // a 3 b 3 c 5
console.log(a++) //3
console.log(a) //4
console.log(b) //3
console.log(c) //5
console.log(a +++ b) //7
为什么c等于5?
运算符优先级 ++高于+
所以就是先执行a++ 然后再+b
var a = 2, b = 3;
var c = ++a
console.log("c",c) // 3
优先级 运算类型 关联性 运算符
19 圆括号 n/a ( … )
18 成员访问 从左到右 … . …
18 需要计算的成员访问 从左到右 … [ … ]
18 new (带参数列表) n/a new … ( … )
17 函数调用 从左到右 … ( … )
17 new (无参数列表) 从右到左 new …
16 后置递增(运算符在后) n/a … ++
16 后置递减(运算符在后) n/a … --
15 逻辑非 从右到左 ! …
15 按位非 从右到左 ~ …
15 一元加法 从右到左 + …
15 一元减法 从右到左 - …
15 前置递增 从右到左 ++ …
15 前置递减 从右到左 -- …
15 typeof 从右到左 typeof …
15 void 从右到左 void …
15 delete 从右到左 delete …
14 乘法 从左到右 … * …
14 除法 从左到右 … / …
14 取模 从左到右 … % …
13 加法 从左到右 … + …
13 减法 从左到右 … - …
12 按位左移 从左到右 … << …
12 按位右移 从左到右 … >> …
12 无符号右移 从左到右 … >>> …
11 小于 从左到右 …< …
11 小于等于 从左到右 … <= …
11 大于 从左到右 … > …
11 大于等于 从左到右 … >= …
11 in 从左到右 … in …
11 instanceof 从左到右 … instanceof …
10 等号 从左到右 … == …
10 非等号 从左到右 … != …
10 全等号 从左到右 … === …
10 非全等号 从左到右 … !== …
9 按位与 从左到右 … & …
8 按位异或 从左到右 … ^ …
7 按位或 从左到右 … | …
6 逻辑与 从左到右 … && …
5 逻辑或 从左到右 … || …
4 条件运算符 从右到左 … ? … : …
3 赋值 从右到左 … = …
3 赋值 从右到左 … += …
3 赋值 从右到左 … -= …
3 赋值 从右到左 … *= …
3 赋值 从右到左 … /= …
3 赋值 从右到左 … %= …
3 赋值 从右到左 … <<= …
3 赋值 从右到左 … >>= …
3 赋值 从右到左 … >>>= …
3 赋值 从右到左 … &= …
3 赋值 从右到左 … ^= …
3 赋值 从右到左 … |= …
2 yield 从右到左 yield …
2 yield* 从右到左 yield* …
1 spread n/a ... …
0 逗号 从左到右 … , …