JavaScript逻辑运算符
逻辑运算符
前面我们学习了JS的算术运算符和比较运算符,本篇文章我们继续学习JS的逻辑运算符,在编程语言里,比较和逻辑运算符都是语句中重要的部分。
JavaScript 中有三个逻辑运算符:||
(或),&&
(与),!
(非)。虽然它们被称为“逻辑”运算符,但这些运算符却可以被应用于任意类型的值,而不仅仅是布尔值。它们的结果也同样可以是任意类型。
||(或运算)
||(或运算)在传统的编程中,逻辑或仅能够操作布尔值。如果参与运算的任意一个参数为 true
,返回的结果就为 true
,否则返回 false
。下面是四种可能的逻辑组合:
算术运算符也就是我们熟悉的数学运算符,比如说 加法 +
,减法 -
,乘法 ×
,除法 ÷
,取余 %
,求幂 **
,前面四个都很简单,而取余和求幂需要说一说。
取余运算符是 %
,尽管它看起来很像百分数,但实际并无关联。a % b
的结果是 a
整除 b
的 余数。比如下面:
console.log( true || true ); // true
console.log( false || true ); // true
console.log( true || false ); // true
console.log( false || false ); // false
在 JavaScript 中,处理运算时存在类型转换,逻辑运算符更加灵活强大。如果操作数不是布尔值,那么它将会被转化为布尔值来参与运算。数字 1
被作为 true
处理,数字 0
则被作为 false
:
console.log( 1 || false ); // 1
console.log( 1 || 0 ); // 1
console.log( 0 || false ); // false
console.log( false || 0 ); // 0
其实从上面的比较来看,||(或运算)遇到true就会返回值,如果没有遇到true,那就返回最后一个值。这一特性可以总结为寻找第一个真值,而真值后面的值被忽略,形成了短路的状态,比如下面的多级或运算。
console.log( false || 0 || 1); //1
console.log( false || 0 || 0); //0
console.log( false || 0 || false); //false
console.log( false || 1 || true); //1
在JavaScript中,空字符串,undefined,null,0,NaN等假值都会在运算中转换为false。
&&(与运算)
两个 & 符号表示 &&
与运算符。在传统的编程中,当两个操作数都是真值时,与运算返回 true
,否则返回 false
。
console.log( true && true ); // true
console.log( false && true ); // false
console.log( true && false ); // false
console.log( false && false ); // false
和上面的||(或运算)相反,与运算返回第一个假值,如果没有假值就返回最后一个值。
console.log( false && 0 && 1); //false
console.log( true && 0 && false); //0
console.log( 1 && true && 0); //0
console.log( true && 1 && true); //true
与或组合运算,当出现与或组合运算时,与优先级会高于或优先级。
console.log( 1 && 0 || 2 && 3 ); // 3 根据优先级先算两个&&运算,最后或运算
console.log( 0 || 1 && 2 || 3 ); // 2 先算中间与运算,在算前面或运算,最后算后面或运算
!(非运算)
感叹符号 !
表示布尔非运算符,要注意这里的感叹号是英文输入法状态下的。逻辑非运算符接受一个参数,将操作参数转化为布尔类型:true/false
,并返回相反的值。
console.log( !true ); // false
console.log( !0 ); // true
两个非运算 !!
有时候用来将某个值转化为布尔类型:第一个非运算将该值转化为布尔类型并取反,第二个非运算再次取反。最后我们就得到了一个任意值到布尔值的转化。
alert( !!"HelloWorld" ); // true
alert( !!null ); // false
非运算符
!
的优先级在所有逻辑运算符里面最高,所以它总是在&&
和||
之前执行。