自增和自减
基本功能
一元(目)运算符 --> 只能对一个操作数进行操作。 自增和自减只能针对变量操作,字面量不行。
++:将某个变量的值自增1 --:将某个变量的值自减1
var a = 1;
console.log(a++); // 输出的是 a++这个表达式的值,并不是a的值。 a++表达式的值为a自增之前的值 1
a--; // a = a -1 = 2 - 1 = 1
console.log(a); // 1
细节
自增自减表达式
x++:将变量x自增1,得到的「表达式的值」是自增之前的值 ++x:将变量x自增1,得到的「表达式的值」是自增之后的值 x--:将变量x自减1,得到的「表达式的值」是自减之前的值 --x:将变量x自减1,得到的「表达式的值」是自减之后的值
var x = 1;
x++;
console.log(x); // 2
console.log(++x); // 3 输出是++x表达式的值
console.log(x); //3
var x = 1;
var y = ++x + 1;
console.log(y); // 3
console.log(x); // 2
优先级
从高到低依次是:
++ --他们的优先级是最高的,不论放前还是放后* / %+ -=赋值符号的优先级最低
如果考虑优先级,不考虑真正进行运算规则,那么部分题是可以做的,但是遇到部分题答案就不尽人意了。我们来看一些:
var x = 1;
var y = x + 1 * x;
console.log(y); // 2
如果配合上 ++ -- ,那么按照优先级运算 那么问题就来了
var x = 1;
var y = x + x++ * x + 3;
console.log(y); // 根据优先级计算那么理应该输出7, 实际输出是6
这是为什么呢? 那么就需要注意运算中 这些细节了。 计算时要打开自己的记事本,慢慢来算。
优先级的运算细节:
- 从左到右依次查看
- 如果遇到操作数,将数据的值直接取出
- 如果遇到相邻的两个运算符,并且左边的运算符优先级大于等于右边的运算符,则直接运行左边的运算符。
- 计算后在从左到右看,跟随上面是顺序。
有了这个顺序和细节,任何问题都可以解决了。 我们来一道比较难的。
var x = 1;
var y = x + ++x + 3 * (x = ++x + x + x++ + 1) + x++ + 3;
console.log(y); // 46
// 在()运算时,不是直接上来就是运算()里面的,还是按照运算顺序来计算,运算到()的时候,在算()里面的。
// x = xxx + xxx... 输出是表达式的值,类似console.log(x = 1),输出1,最终x的值赋值也是1
结束
❝大概也就这么多吧,欢迎大家指正补充。 码字不易,希望点赞关注转发3连。 最后祝各位程序员永不脱发!
❞
本文使用 mdnice 排版