前言
自增和自减相信大家都听说过,就拿自增来说,++在前,先运算在赋值,++在后先赋值,在运算。我相信大家都记得这句话,可是实际用的时候,你真的会算对吗?
小试牛刀
来看一道题
var c = 1;
var z = ++c + c++;
我刚开始算的步骤是:
z=2+c++
z=2+2++
z=2+3
z=5
反思 : 这是我第一次的解题步骤,但是我到浏览器打印的结果是4,我当时人就‘傻了’。我寻思自己的解题步骤没错啊,那问题肯定就是我的解题思维出现了问题。终于在询问了各路大神后,我发现了我的问题出现在z=2+2++这一步上,我当时想的是++的运算优先级高于+所以我就先运算后面的,问题就出现在这里,2++改变的是c的值,与z的结果无关所以z=2+2++=4++=4,此时c=3;
至此我搞清楚了,怎样使用++,学会了怎样计算带有++的表达式。
终极挑战
例题: var l = 1;
var q = 2;
var w = ‘’;
var res = (++l+l++)-3* (q+±++q)-q++;
res = (++1+l++)-3* (q+±++q)-q++;
res = (2+2++)-3* (q+±++q)-q++;
res = (4)-3* (q+±++q)-q++;
res = 4-3* (2+± ++q)-q++; // 2++===> l q = 3
res = 4-3* (2-++3)-q++; // q =3
res = 4-3* (2-4)-q++; // q =4
res = 4-3* (2-4)-4++; // q =4
res = 4-3* (-2)-4++; // q =4
res = 4-(-6)-4++; // q =4
res = 10 -4++; // q =4
res = 6 // q=5
你能得到res=6 q=5;的话,恭喜你自增和自减你已经完全明白了。
另附:自结运算符优先级口诀:
括号成员最高级,全体单目排第二;乘除余三,加减四,移位五,关系六,等于不等于排老七,逻辑八,赋值九,逗号成员最低级 。