第一:y++與 ++y的問題
- y++:這是一個表達式,等於y之前的值
++y:值先自加
var y=4,z=0; z=y++; console.log(“z=”+z); console.log("y="+y);
結果是:z=4 y=5;
結果分析:對於z=y++
來說,它是表示將y賦值給z,y再自加1,,所以z的值是y自加之前的;而y
的值是y=y+1
之後的值
實戰練習:
var a= 2,z=0;
z=(a++)+(++a)+(a++)+(++a);
alert(z);
計算結果是:16.
分析見圖:
第二:邏輯與&和邏輯非|的短路現象
var result, x=3;
var y=4;
result= x < 20 && y++ >10;
console.log(result);
console.log(y);
輸出結果:flase y==5
var result, x=3;
var y=4;
result= x > 20 && y++ >10;
console.log(result);
console.log(y);
輸出結果:flase y=4
這是怎麼造成的呢?
在這裏我們注意到,只改變了 result= x < 20 && y++ >10;
這條語句,在執行&&運算時,只有兩個條件都爲false時,輸出結果才能是false,當第一個條件執行結果就爲false時,後面的那個條件就不會再執行了。這樣便出現了短路的現象,導致y的自加不會計算
邏輯||運算和邏輯&&同理,邏輯||在滿足一個條件爲true時,結果就會返回true,所有第一個條件判斷爲true就不會再執行下一個條件,這就造成短路現象。
第三:條件判斷爲真都有哪些
- 所有的數值都有真假性,除0以外都是真
- 字符串 除“”以外都爲假,其他都爲真
- undefine是假