韩老师讲到:
<script type=text/javascript>
var a = 3;
var b = 4;
var c = 1;
if ( a < b && --c && ++a)
{
window.alert("OK")
}
window.alert(c) // c = 0
window.alert(a) // a =3
那假若把“--c”变成“c--“”,此时c的值也是0,为什么a的值就变为4了呢?
望各位老师解答一下,谢谢!
--c 是先进行运算,后赋值给c ,也就是先斩后奏,当你杀他那时皇上还不知道,还认为他还没死,所以c还是原来的c,后来禀报后才知道,他已经死了,这时c减了一。
而c-- 是减去后就赋值给c了,当时c就少一,也就是皇上亲自监斩。
对于--c时
a < b true
--c c先自减 c=0 false(0为假 非0为真)
a<b&&--c false然后就会触发&&的“短路”不执行++a
所有c=0,a=3
对于c--
c-- c先判断真假再自减 所有判断时c=1 为true 然后c自减
a<b&&--c true 不会触发&&的"短路" 执行并判断++a
所以c=0,a=4
--c时,表达式左边为false,右边++a不进行运算,所以a的值还是3
c++时,表达式左边为true,所以右边++a还要进行运算,所以a的值变为4
if ( a < b && c-- && ++a);//此时c的值也是0了,应该也为假,++a就应该不进行运算了,那么a的值应该还是3才对,为什么会进行计算了呢?
--c 是先进行运算,后赋值给c ,也就是先斩后奏,当你杀他那时皇上还不知道,还认为他还没死,所以c还是原来的c,后来禀报后才知道,他已经死了,这时c减了一。
而c-- 是减去后就赋值给c了,当时c就少一,也就是皇上亲自监斩。
对于--c时
a < b true
--c c先自减 c=0 false(0为假 非0为真)
a<b&&--c false然后就会触发&&的“短路”不执行++a
所有c=0,a=3
对于c--
a < b true
c-- c先判断真假再自减 所有判断时c=1 为true 然后c自减
a<b&&--c true 不会触发&&的"短路" 执行并判断++a
所以c=0,a=4
--c时,表达式左边为false,右边++a不进行运算,所以a的值还是3
c++时,表达式左边为true,所以右边++a还要进行运算,所以a的值变为4
<script type=text/javascript>
var a = 3;
var b = 4;
var c = 1;
if ( a < b && c-- && ++a);//此时c的值也是0了,应该也为假,++a就应该不进行运算了,那么a的值应该还是3才对,为什么会进行计算了呢?
{
window.alert("OK")
}
window.alert(c) // c = 0
window.alert(a) // a =3