JS中||或 、 && 与的执行顺序测试

js中|| 和&&的执行结果默认是0为false。

a && b ,如果 a 为true,直接返回b,而不管b为true或者false,否则返回a;
 a || b ,如果 a 为false,直接返回b,而不管b为true或者false,否则返回 a。

如alert(-1||-2); 返回-1;alert(-1&&-2);返回-2

例1:

var i = 1;
var t =( 
	9 ||(function(){i = 2;	console.log("fn1");return false;})() 
	&& (function(){i = 3;console.log("fn2");return true;})()
	&& (function(){i = 4;console.log("fn3");return true;})());
console.log("t=",t,"i=",i)

输出结果:


例2:

var i = 1;
var t =( 
	(9 ||(function(){i = 2;	console.log("fn1");return false;})() )
	&& (function(){i = 3;console.log("fn2");return true;})()
	&& (function(){i = 4;console.log("fn3");return true;})());
console.log("t=",t,"i=",i)
输出结果:

这里和||、&&的短路有关,||式子前结果是true则短路,即||式后面的表达式不计算,直接返回||式前值;&&式子前是false则短路,返回&&式子前的值,后面的式子不计算。||、&&按从左往右的顺序执行。

所以例1中,9大于0为true又是||或运算,出现短路后面的式子都不计算,直接返回9;例2 或||计算外加了括号,需先计算出结果后再和其他式子进行与&&计算。(9 ||(function(){i = 2; console.log("fn1");return false;})())这个表达式里面会出现或运算短路的情况,这里计算完进行&&与运算时,因&&式式前不是false所以不会有短路,会一直计算完整个式子。





参考:http://www.cnblogs.com/abi-blog/p/5282779.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值