Datehoer的博客
我本将心向明月,奈何明月照沟渠
Datehoer的博客

当前位置:主页 > 技术分享 > JavaScript 递增递减运算符前置后置的区别

JavaScript 递增递减运算符前置后置的区别

浏览: 作者:Datehoer 发布日期:2020-12-31 21:53:53 来源: 原创
JavaScript的递增递减运算符前置和后置,我一开始其实是以为没区别的,但是当时老师出了个这个题,做起来很难受。。。
for(var a =1,b=0;a<b;a++){
            b=a;
        }
console.log(b);
大概题就是这么个题,现在看应该是我错了,我当时以为老师出错题了。后来发现还是我太年轻。
所以来说一下递增递减运算符前置和后置都有什么区别,其实一般来说,没有什么区别。。。

我们可以先定义a = 1;然后分别输出++a和a++,看一下效果。

var a =1;
console.log(++a);
var a =1;
console.log(a++);
javascript递增递减运算符前置后置的区别
可以看到,他们是有区别的,这是为什么呢?
按照我的理解,应该是它如果读取的是+号会向后继续读取,而读取的是a的话,那么会直接输出a而不管后面的内容了。

前置型简单理解就是先计算再赋值

 

后置型简单理解就是先赋值再计算

之所以他们有区别,究其根本还是因为运算符的优先级有区别。

优先级 运算类型 关联性 运算符
21 圆括号 n/a(不相关) ( … )
20 成员访问 从左到右 … . …
需计算的成员访问 从左到右 … [ … ]
new (带参数列表) n/a new … ( … )
函数调用 从左到右 … ( … )
可选链(Optional chaining) 从左到右 ?.
19 new (无参数列表) 从右到左 new …
18 后置递增(运算符在后) n/a
 
… ++
后置递减(运算符在后) … --
17 逻辑非 从右到左 ! …
按位非 ~ …
一元加法 + …
一元减法 - …
前置递增 ++ …
前置递减 -- …
typeof typeof …
void void …
delete delete …
await await …
16 从右到左 … ** …
15 乘法 从左到右
 
… * …
除法 … / …
取模 … % …
14 加法 从左到右
 
… + …
减法 … - …
13 按位左移 从左到右 … << …
按位右移 … >> …
无符号右移 … >>> …
12 小于 从左到右 … < …
小于等于 … <= …
大于 … > …
大于等于 … >= …
in … in …
instanceof … instanceof …
11 等号 从左到右
 
… == …
非等号 … != …
全等号 … === …
非全等号 … !== …
10 按位与 从左到右 … & …
9 按位异或 从左到右 … ^ …
8 按位或 从左到右 … | …
7 逻辑与 从左到右 … && …
6 逻辑或 从左到右 … || …
5 空值合并 从左到右 … ?? …
4 条件运算符 从右到左 … ? … : …
3 赋值 从右到左 … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
… &&= …
… ||= …
… ??= …
2 yield 从右到左 yield …
yield* yield* …
1 展开运算符 n/a ... …
0 逗号 从左到右 … , …


我们可以看到后置运算的优先级是大于前置的,所以前置是先运算再传值,而后置是先传值再运算。其实也就是我前面所说的,++在前面,所以我们先运算然后再传值,而++在后面的话,我们就先传值再运算。

并且其实后置的话,并非不进行运算了,只是如果想要看到效果的话,需要改一下前面的代码。

 

var a =1;
console.log(a++);
console.log(++a);
可以看到结果为第二个结果为3,所以其实只是不显示而已,并非不执行。

如果有什么疑问,可以在评论区留言,我会在看到的第一时间进行回复的。

版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/jsfx/107.html。

文章推荐

热门标签

返回顶部
下面为相关推荐
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!