其实我们很早就已经接触过逻辑运算符,在初中物理中我们就已经了解了逻辑运算符的概念,所以我们对逻辑运算符的学习其实从中学的物理中就有所体现了。本文我们就带大家一起重温经典,回顾逻辑运算符的同时,利于我们更深入的学习。
逻辑运算符一共有以下三个:||(或),&&(与),!(非)。
虽然他们被称为“逻辑”运算符,但这些运算符却可以被应用于任意类型的值,而不仅仅是布尔值。他们的结果也同样可以是任意类型。让我们来详细看一下各种逻辑运算符的用法。
两个竖线符号表示了“或”运算:
result = a || b;
在传统的编程中,逻辑或仅能够操作布尔值。如果参与运算的任意一个参数为 true,返回的结果就为 true,否则返回 false。
在 JavaScript 中,逻辑运算符更加灵活强大。但是首先我们看一下操作数是布尔值的时候发生了什么。
下面是四种可能的逻辑组合:
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
正如我们所见,除了两个操作数都是 false 的情况,结果都是 true。
如果操作数不是布尔值,那么它将会被转化为布尔值来参与运算。
例如,数字 1 将会被作为 true,数字 0 则作为 false:
if (1 || 0) { // 工作原理相当于 if( true || false )
alert( 'truthy!' );
}
大多数情况,逻辑或 || 会被用在 if 语句中,用来测试是否有 任何 给定的条件为 true。
操作数不仅仅可以是值,还可以是任意表达式。或运算会从左到右计算并测试每个操作数。当找到第一个真值,计算就会停止,并返回这个值。这个过程就叫做“短路取值”,因为它尽可能地减少从左到右计算的次数。
当表达式作为第二个参数并且有一定的副作用(side effects),比如变量赋值的时候,短路取值的情况就清楚可见。
两个 & 符号表示 && 与操作:
result = a && b;
传统的编程中,当两个操作数都是真值,与操作返回 true,否则返回 false:
alert( true && true ); // true
alert( false && true ); // false
alert( true && false ); // false
alert( false && false ); // false
使用 if 语句的例子:
let hour = 12;
let minute = 30;
if (hour == 12 && minute == 30) {
alert( 'Time is 12:30' );
}
就像或运算一样,与运算的操作数可以是任意类型的值:
if (1 && 0) { // 作为 true && false 来执行
alert( "won't work, because the result is falsy" );
}
与操作寻找第一个假值
给出多个参加与运算的值:
result = value1 && value2 && value3;
与运算 && 做了如下的事:
从左到右依次计算操作数。
将处理每一个操作数时,都将其转化为布尔值。如果结果是 false,就停止计算,并返回这个操作数的初始值。
如果所有的操作数都被计算过(也就是,转换结果都是 true),则返回最后一个操作数。
换句话说,与操作符返回第一个假值,如果没有假值就返回最后一个值。
上面的规则和或运算很像。区别就是与运算返回第一个假值而或操作返回第一个真值。
所以代码 a && b || c && d 完全跟 && 表达式加了括号一样:(a && b) || (c && d)。
就像或运算一样,与运算 && 有时候能够代替 if。
带 && 的代码变体看上去更短。但是 if 的含义更明显,可读性也更高。
所以建议是根据目的选择代码的结构。需要条件判断就用 if,需要与运算就用 &&。
感叹符号 ! 表示布尔非运算。
语法相当简单:
result = !value;
操作符接受一个参数,并按如下运作:
将操作数转化为布尔类型:true/false。
返回相反的值。
例如:
alert( !true ); // false
alert( !0 ); // true
两个非运算 !! 有时候用来将某个值转化为布尔类型:
alert( !!"non-empty string" ); // true
alert( !!null ); // false
也就是,第一个非运算将该值转化为布尔类型并取反,第二个非运算再次取反。最后我们就得到了一个任意值到布尔值的转化。
有更多详细的方法可以完成同样的事 —— 一个内置的 Boolean 函数:
alert( Boolean("non-empty string") ); // true
alert( Boolean(null) ); // false
非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 && 和 || 前执行。
想要了解更多的Java逻辑运算符的相关知识可以到动力节点在线网站上观看免费视频课程,在学习更多知识的同时锻炼我们的思考能力。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54