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

开发 开发工具
本文主要介绍javascript中逻辑运算符“||”和“&&”的作用。

前面一直没空,遗留了几个问题,现在处理下。

[[190951]]

在javascript中运算符 & 的作用。

  1. // 9 is 00000000000000000000000000001001  
  2. var expr1 = 9;  
  3.   
  4. // 5 is 00000000000000000000000000000101  
  5. var expr2 = 5;  
  6.   
  7. // 1 is 00000000000000000000000000000001  
  8. var result = expr1 & expr2;  
  9.   
  10. document.write(result);  
  11. // Output: 1 

在这里先是将9 和5转换为2进制,然后在进行运算,然后根据每一位对应来计算,两种均为1为1的计算放法,也就是‘与’。

一、先来说说||(逻辑或),从字面上来说,只有前后都是false的时候才返回false,否则返回true。

  1. alert(true||false);    // true 
  2. alert(false||true);    // true 
  3. alert(true||true);        // true 
  4. alert(false||false);    // false 

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

  1. alert(0||1); 

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

  1. alert(2||1); 

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

  1. alert('a'||1); 

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

  1. alert(''||1); 

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

  1. alert('a'||0); 

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

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

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

  1. alert(''||0); 

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

  1. alert(0||''); 

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

这就意味

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

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

  1. alert(true&&false);    // false 
  2. alert(true&&true);    // true 
  3. alert(false&&false);    // false 
  4. alert(false&&true);    // false 

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

  1. alert(''&&1); 

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

  1. alert(''&&0); 

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

  1. alert('a'&&1); 

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

  1. alert('a'&&0); 

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

  1. alert('a'&&''); 

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

  1. alert(0&&'a'); 

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

  1. alert(0&&''); 

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

这意味着

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

让我们总结一下:

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

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

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

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

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

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

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

返回结果是1。

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

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

 【本文为51CTO专栏作者“谢军”的原创稿件,转载可通过作者微信公众号(jingfeng18)获取联系】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2009-08-12 14:23:09

C#逻辑运算符

2009-11-18 09:37:31

PHP逻辑运算符

2023-03-29 09:22:03

SQLWhere语句

2021-06-07 06:10:22

C++While循环For 循环

2023-04-10 08:58:13

C#关系运算符

2009-11-18 09:19:47

PHP逻辑运算符

2023-04-07 08:02:54

源码位逻辑运算符

2022-10-21 16:28:52

PythonGo布尔值

2020-10-15 08:11:56

JavaScript逻辑运算符

2021-02-20 23:34:22

JavaScript运算符开发

2009-06-21 13:48:05

ShellLinux运算符

2010-10-08 09:17:07

JavaScript表JavaScript运

2009-08-11 15:51:08

C#运算符算术运算符

2023-04-11 10:13:04

Java运算符反码

2024-02-26 15:17:20

2021-05-07 06:27:29

JavaScript运算符开发

2021-07-12 15:35:56

JavaScript代码运算符

2009-08-12 15:20:18

C#赋值运算符复合赋值运算符

2015-06-09 10:55:58

JavaScriptinstanceof运

2013-08-15 16:48:39

.Net基础
点赞
收藏

51CTO技术栈公众号