doubleyong
管理员
管理员
  • 最后登录2026-05-25
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:4408回复:0

[es 6]关于 i=i++; 出乎意外的结果

楼主#
更多 发布于:2022-02-26 09:36
今天和大家分享一道题

var i = 0;
var a = i++;
console.log(a);


答案,相信大家一眼就能看出,  结果为 0

下面变化一下,代码如下

var i = 0;
i = i++;
console.log(i);
结果多少呢?  0  or   1







先思考下!






先思考下!






先思考下!




揭晓答案,结果还是 0 ; Why ?  Why ?  Why ?


( 你做对了嘛^_^ )





解析:


运算符优先级


++作为后置递增时,优先级为16,而作为前置递增时,优先级为15


=作为赋值运算符时,优先级为3


所以,++会优先于=而执行



++运算符前置与后置的区别


我们看看MDN上对该运算符的说明:
If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing.If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.




简单翻译:


如果该运算符作为后置操作符,则返回它递增之前的值;
如果该运算符作为前置操作符,则返回它递增之后的值


所以,我们就知道, ++运算符会返回一个值,如果前置,则返回操作对象递增之后的值,如果后置,则返回操作对象递增之前的值。


当 var i=0 ; var i = i++; 时,实际上做了如下操作
i = 0
j = i; // j 操作运算时系统生成的 
i = i+1;
i = j;  // 故i=0



当 var i=0 ; var i =++i; 时,实际上做了如下操作
i = 0
i = i+1;
j = i;  //注意和上面代码的位置
i = j;  // 故i=1




总结:

不管++在前,还是在后;++运算符的优先级都高于=号;

区别在于,++返回的是递增之前的值,还是递增之后的值
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号