逻辑运算符

逻辑运算符用于将多个条件表达式或值组合起来,判断它们整体为 true 还是 false。表4-6列出了 TypeScript 中的逻辑运算符。

image 2024 02 17 16 18 31 089
Figure 1. 表4-6 逻辑运算符

示例代码如下。

let a: number = 10;
//以下语句输出true: a>1为true,a<11为true  因此整体为true
console.log(a > 1 && a < 11);
//以下语句输出false: a>1为true,a<5为false  因此整体为false
console.log(a > 1 && a < 5);
//以下语句输出true: a>1为true,a<5为false,但||只需一边为true,因此整体为true
console.log(a > 1 || a < 5);
//以下语句输出false: a>11为false,a<5为false,||两边均不是true,因此整体为false
console.log(a > 11 || a < 5);
//以下语句输出false: a>1为true,整体取反后为false
console.log(!(a > 1));
//以下语句输出true: a>11为false,整体取反后为true
console.log(!(a > 11));

注意,以上 3 种运算符都会对其他类型的值进行隐式转换,但转换方式有所不同。对于 ! 运算符,无论是在判断还是在返回运算结果值时,都转换为布尔类型,示例代码如下。

console.log(!"hello"); //输出false

以上代码等同于以下代码。

console.log(!Boolean("hello")); //输出false

然而,对于 && 运算符和 || 运算符,隐式转换更复杂,它只在判断时进行隐式转换,但在返回运算结果时,会按照原来的类型返回,因此会出现以下情况(以下仅是示例,实际开发过程中请勿这样使用)。

//以下语句中,0会隐式转换为false,"a"会隐式转换为true,因此返回左侧值0并输出0
console.log(0 && "a");
//以下语句中,0会隐式转换为false,"a"会隐式转换为true,因此返回右侧值"a"并输出“a”
console.log(0 || "a");
//以下语句中,1会隐式转换为true,"a"会隐式转换为true,因此返回右侧值"a"并输出“a”
console.log(1 && "a");
//以下语句中,1会隐式转换为true,"a"会隐式转换为true,因此返回左侧值1并输出1
console.log(1 || "a");

如果计算左侧表达式的值后已经能判断整体结果,则不会再执行右侧的代码。例如,以下代码不会在控制台输出 test1test2 字符串,因为根据左侧表达式已经能判断整体结果。

true || console.log("test1");
false && console.log("test2");