关于 i=i++; 出乎意外的结果
2022-02-17 23:28 作者:doubleyong | 我要投稿
今天和大家分享一道题
答案,相信大家一眼就能看出, 结果为 0
下面变化一下,代码如下
结果多少呢? 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++; 时,实际上做了如下操作
当 var i=0 ; var i =++i; 时,实际上做了如下操作
总结:
不管++在前,还是在后;++运算符的优先级都高于=号;
区别在于,++返回的是递增之前的值,还是递增之后的值