咨询热线:4006-75-4006

售前:9:00-23:30    备案:9:00-18:00    技术:7*24h

JavaScript 逻辑运算符 “||” 和 “&&”

2019-05-13 02:14:59 2852次

alert (1 && 2) 得到的结果是什么?


A:true B:false C:1 D:2


请带着你的回答,往下看……


逻辑或

逻辑或,也就是 “||”。从字面上来说,只有前后都是 false 的时候才返回 false,否则返回 true。


alert(true||false);    // true

alert(false||true);    // true

alert(true||true);        // true

alert(false||false);    // false

但是,从深层意义上来说的话,却有另一番天地,试下面代码


alert(0||1);

显然,我们知道,前面 0 意味着 false, 而后面 1 意味着 true, 那么上面的结果应该是 true, 而事实返回的结果是 1。再看下面代码:


alert(2||1);

我们知道,前面 2 是 true, 后面 1 也是 true, 那返回结果又是什么呢?测试结果是 2, 继续看:


alert('a'||1);

同样,前面 'a' 是 true,后面 1 也是 true; 测试结果是 'a', 下面


alert(''||1);

由上,我们知道前面 '' 是 false, 后面 1 是 true, 而返回结果是 1。再看下面


alert('a'||0);

前面 'a' 是 true,而后面 0 是 false, 返回结果是 'a',继续下面


alert('a'||'b');

前面 'a' 是 true, 后面 'b' 是 false, 返回结果是 'a',我们继续下面


alert(''||0);

前面 '' 是 false, 后面 0 同样是 false, 返回结果是 0


alert(0||'');

前面 0 是 false,后面 '' 是 false,返回结果是 ''


这就意味


1、只要 “||” 前面为 false, 不管 “||” 后面是 true 还是 false,都返回 “||” 后面的值。


2、只要 “||” 前面为 true, 不管 “||” 后面是 true 还是 false,都返回 “||” 前面的值。


逻辑与

下面说说逻辑与(&&), 从字面上来说,只有前后都是 true 的时候才返回 true,否则返回 false。


alert(true&&false);    // false

alert(true&&true);    // true

alert(false&&false);    // false

alert(false&&true);    // false

然后,根据上面经验,我们看看 “&&” 号前后,不单单是布尔类型的情况。


alert(''&&1);

结是返回 '',“&&” 前面 '' 是 false, 后面是 1 是 true。


alert(''&&0);

结是返回 '',“&&” 前面 '' 是 false, 后面是 0 也是 false。


alert('a'&&1);

结是返回 1,“&&” 前面 ''a 是 true, 后面是 1 也是 true。


alert('a'&&0);

结是返回 0,“&&” 前面 ''a 是 true, 后面是 0 是 false。


alert('a'&&'');

结是返回 '',“&&” 前面 ''a 是 true, 后面是 '' 是 false。


alert(0&&'a');

结是返回 0,“&&” 前面 ''0 是 false, 后面是 'a' 是 true。


alert(0&&'');

结是返回 0,“&&” 前面 ''0 是 false, 后面是 '' 也是 false。


这意味着


1、只要 “&&” 前面是 false,无论 “&&” 后面是 true 还是 false,结果都将返 “&&” 前面的值;


2、只要 “&&” 前面是 true,无论 “&&” 后面是 true 还是 false,结果都将返 “&&” 后面的值;


让我们总结一下:


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


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


3、只要 “&&” 前面是 false,无论 “&&” 后面是 true 还是 false,结果都将返 “&&” 前面的值;


4、只要 “&&” 前面是 true,无论 “&&” 后面是 true 还是 false,结果都将返 “&&” 后面的值;


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


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


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

返回结果是 1。


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


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


首页
最新活动
个人中心