在javascript的邏輯運算中,關于--c和c--的一個小問題.
問題描述
韓老師講到:
<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了呢?
望各位老師解答一下,謝謝!
問題解答
回答1:--c 是先進行運算,后賦值給c ,也就是先斬后奏,當你殺他那時皇上還不知道,還認為他還沒死,所以c還是原來的c,后來稟報后才知道,他已經死了,這時c減了一。
而c-- 是減去后就賦值給c了,當時c就少一,也就是皇上親自監斬。
回答2:對于--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
回答3:--c時,表達式左邊為false,右邊++a不進行運算,所以a的值還是3
c++時,表達式左邊為true,所以右邊++a還要進行運算,所以a的值變為4
回答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
