JavaScript有三个逻辑运算符: || (或),&&(与),!(非)
一、|| (或)
- 总结起来就是有真就真,全假才假。只要有一个为真结果就是真,两个都是假结果才假。
- 如果操作符不是布尔值,那么他将被转换为布尔值来参与运算,例如数字作为true处理 ,数字0作为false
- 或值运算寻找第一个真值
result = value1 || value2 || value3;
执行步骤:
a.从左到右依次计算操作数
b.处理每一个操作数时,都将其转换为布尔值。如果是true,就停止计算,返回这个操作数发的初始值。
c.如果所有的操作数都被计算过(也就是转换结果都是false),则返回最后一个操作数。
- 返回的值是原始操作数的类型,不会做布尔转换
1.获取变量列表或者二表达式中的第一个真值
如果所有的变量都是假值,结果就是“SuperCoder”
2.短路求值
这里指的是, || 对其参数进行处理,直到达到第一个真值,然后立刻返回该值,而无需处理其他参数。
如果操作数不仅仅是一个值,而是一个有副作用的表达式,例如变量赋值或函数调用,那么这一特性的重要性就显而易见
在下面这个例子当中只会打印第二条信息
有时,人们利用这个特性,只在左侧的条件为假的时候才执行。
二、&&(与)
有假全假,都真则真。当两个操作数都是真才会返回true,否则有一个是假,结果返回false。
同或运算一样,与运算的操作数可以是任意类型的值:
结果是不会有弹窗
- 与运算寻找第一个假值(对于给出多个参与运算的值)
a.从左到右一次计算操作数
b.在处理每一个操作数时,都将其装换为布尔值。如果结果是false,就停止计算,返回这个操作数的初始值。
c.如果所有的操作数都被计算过(假如都是真值),则返回最后一个操作数
总的来说就是,与运算返回第一个假值,如果没有假值就返回最后一个值
多值串联
与运算 && 在或运算 || 之前进行,也就是说,与运算符的优先级更高
所以代码 a && b || c && d 跟下面加了括号的表达式一样
(a && b) || (c && d)
三、!(非)
- 逻辑非运算符接受一个参数,并开始如下运作
1.将操作数转化为布尔型:true/false
2.返回相反的值
- 两个非运算!!有时候用来将某个值转换为布尔型类型
当然还有一个方法也可以做到上述的转换,那就是
知识检验
1.
结果是先是1,然后是2
2.
结果是:1,然后undefined