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

来源:互联网 发布:免费股票交易软件 编辑:程序博客网 时间:2024/06/06 11:47

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

0 0
原创粉丝点击