欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS运算符&&与||遵守短路原则讲解

程序员文章站 2022-09-11 15:57:48
1.&& -- 与 符号前面和后面都为true则返回true,但是有一方为false则返回false。那么下面的内容会输出什么呢? alert(1&&1); aler...

1.&& -- 与

符号前面和后面都为true则返回true,但是有一方为false则返回false。那么下面的内容会输出什么呢?

alert(1&&1); alert(1&&0); alert(0&&0); alert(0&&1);前提是你要知道,0即false, 1or2即true;

2.|| -- 非

符号前面和后面任何一方为true则返回true,双方均为false则返回false。那么下面的内容会输出什么呢?

alert(1||1); alert(1||0); alert(0||0); alert(0||1);前提是你要知道,0即false, 1or2即true;

不留悬念了,输出的内容依次是1, 0, 0, 0, 1,1,0,1

让我们总结一下:

只要“||”前面为false,无论“||”后面是true还是false,结果都返回“||”后面的值。只要“||”前面为true,无论“||”后面是true还是false,结果都返回“||”前面的值。只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

由上两个测试可知,逻辑运算符,“||”和“&&”都是遵行短路原则,只要确定符号前面的真假,既可确定返回值。

需要说明的是“&&”的优先级是高于“||”的,下面测试:

alert(1||'a'&&2);

返回结果是1。

根据反证原理,我们假设“||”的优先级不低于“&&”(这里只所以用“不低于”,是为了同时证明等级相同的情况)。

根据上面我们得出的结论(1),(1||'a')将返回前面的值1,(1&&2)根据结论(4)应该返回后面的值2。这显然不对,由此可知“&&”的优先级是高于“||”的。

敲知识点

&&的运算优先级大于 ||逻辑运算的短路特性:(表达式1)&&(表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”

(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”