在我们先前的使用过程中,我们很多时候都是遇到的是把他们放在if()等判断语句中,直接判断结果是否为真或者假。
比如if(true&&false)判断为假,当然我们用的时候是各种表达式。
关于&&,&,||,|先进行一下说明
&&:逻辑与,判断逻辑结果是否为真,第一个条件为假,不再判断第二个条件
&:按位与,属于数值运算,比如1&2=0,二进制按位与操作01和10结果为00
||:逻辑或,判断逻辑结果是否为真,第一个条件为真,不再判断第二个条件
|:按位或,属于数值运算,比如1|2=3,二进制按位或操作01和10结果为11
&&、||补充说明
这样是不够的,按位操作我们知道是按照二进制进行操作,得到结果。
逻辑与、逻辑或操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况
下,逻辑与操作就不一定返回布尔值。
那么逻辑与、逻辑或的结果是什么呢?
举个例子
alert(1&&2) alert(0||1)
结果是什么?懵逼吗?
规则如下:
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
再详细一点的规则如下(出自JavaScript高级程序设计)
逻辑与
逻辑或
出个题感受一下
var a = 1 && 2 && 3;//3
var b = 0 && 1 && 2;//0
var c = 1 && 0 && 2;//0
var a = 0 || 1 || 2;//1
var b = 1 || 0 || 3;//1
补充说明
优先级问题
运算符 | 描述 |
. [] () | 字段访问、数组下标、函数调用以及表达式分组 |
++ -- - ~ ! delete new typeof void | 一元运算符、返回数据类型、对象创建、未定义值 |
* / % | 乘法、除法、取模 |
+ - + | 加法、减法、字符串连接 |
<< >> >>> | 移位 |
< <= > >= instanceof | 小于、小于等于、大于、大于等于、instanceof |
== != === !== | 等于、不等于、严格相等、非严格相等 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
?: | 条件 |
= oP= | 赋值、运算赋值 |
, | 多重求值 |
优先级依次降低,简而言之,&>|>&&>||
出个题感受一下
var a = 3 && 0 || 2; //2
var b = 3 || 0 && 2; // 3
var c = 0 || 2 && 3; // 3