比较运算符
比较运算符用于判断左右两侧的值是否满足一定条件,这些条件有等于、不等于、大于、小于、大于或等于、小于或等于这几种。当满足条件时,表达式会返回 true
;否则,返回 false
。表4-4列出了 TypeScript 中的比较运算符。

Figure 1. 表4-4 比较运算符
以下为关于比较运算符的示例代码。
let a: number = 10;
console.log(a == 10); //true
console.log(a == 20); //false
console.log(a === 10); //true
console.log(a === 20); //false
console.log(a != 30); //true
console.log(a != 10); //false
console.log(a !== 30); //true
console.log(a !== 10); //false
console.log(a > 9); //true
console.log(a > 10); //false
console.log(a < 12); //true
console.log(a < 10); //false
console.log(a >= 9); //true
console.log(a >= 11); //false
console.log(a <= 11); //true
console.log(a <= 9); //false
该运算符可以用于所有类型,以下是用字符串类型和布尔类型相比较的示例代码。
let a: boolean = true;
console.log(a == true); //true
console.log(a === true); //true
console.log(a != true); //false
console.log(a !== true); //false
console.log(a > false); //true,true默认大于false
console.log(a < false); //false
console.log(a >= false); //true
console.log(a <= false); //false
let b: string = "a"
console.log(b == "a"); //true
console.log(b === "a"); //true
console.log(b != "a"); //false
console.log(b !== "a"); //false
console.log(b > "b"); //false
//参考字符串在Unicode编码表中的先后顺序,排序靠后的字符串大于排序靠前的字符串
console.log(b < "b"); //true
console.log(b >= "b"); //false
console.log(b <= "b"); //true
注意,在 TypeScript 中,比较运算符只能用于同类型比较,无法用于异类型比较。异类型比较会引起编译错误。在 JavaScript 中,比较不同类型的数据会触发隐式转换,也许会出现不可预料的结果,因此在 TypeScript 中进行了限制,只能进行同类型比较。
//编译错误:此条件将始终返回 "false",因为类型 "string" 和 "number" 没有重叠。ts(2367)
console.log("1" == 1);
//编译错误:此条件将始终返回 "true",因为类型 "number" 和 "boolean" 没有重叠。ts(2367)
console.log(1 != true);
//编译错误:运算符">"不能应用于类型"string"和"number"。ts(2365)
console.log("a" > 1);
//编译错误:运算符"<="不能应用于类型"boolean"和"number"。ts(2365)
console.log(true <= 30);
在 JavaScript 中,由于比较运算符在比较不同类型时存在隐式转换,因此针对比较相等和比较不相等两种情况,分别提供了两种形式的运算符( |
let a: any = 1;
let b: any = "1";
console.log(a == b); //true
console.log(a === b); //false
console.log(a != b); //false
console.log(a !== b); //true
可以看到,a
的值是数值,b
的值是字符串,两者是不同的类型,但当定义为 any
类型时进行比较,用 ==
比较的结果与用 ===
比较的结果不同,用 !=
的比较结果与用 !==
比较的结果也不同。由于使用 ==
和 !=
时,运算符两边的类型不同,因此产生了隐式转换。以上代码等同于以下代码。
let a: any = 1;
let b: any = "1";
console.log(String(a) == b); //true
console.log(a === b); //false
console.log(String(a) != b); //false
console.log(a !== b); //true
任何时候都建议优先使用 ===
和 !==
运算符,以免出现意外的结果。