第一: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是假