在 JavaScript 中,可以用下面的关系运算符和相等运算符来比较数字。
| 比较 | 运算符 |
|---|---|
| 大于 | a > b |
| 大于等于 | a >= b |
| 小于 | a < b |
| 小于等于 | a <= b |
| (严格)相等 | a === b |
| 不(严格)相等 | a !== b |
比较的结果始终是一个布尔值,不是true就是false。
1 < 3;
// => true
2 !== 2;
// => false
1 === 1.0;
// => true
// All numbers are floating-points, so this is different syntax
// for the exact same value.
在 JavaScript 中,上面这些比较运算符也可以用来比较字符串。这种情况下,会按照字典(词典序)顺序进行比较。所有字符确切顺序的列表可以看这里。
'Apple' > 'Pear';
// => false
'a' < 'above';
// => true
'a' === 'A';
// => false
比较两个看起来是数字、但类型是字符串的变量时,你需要格外小心。由于按字典序比较,结果和比较 Number 类型的值并不一样。
10 < 2;
// => false
'10' < '2';
// => true (because "1" comes before "2")
另一种比较字符串的方法是 localeCompare。它允许设置各种选项,来调整字符串的比较方式。
你可能会好奇,为什么 JavaScript 中检查相等性要用三个等号。=== 表示检查_严格相等_,也就是说不会进行类型转换,不同类型的值永远不相等。
'3' === 3;
// => false
// The value on the left has type string, the value on the right
// has type number.
1 === 1n;
// => false
// The value on the left has type number, the value on the right
// has type bigint.
在 JavaScript 中检查相等性,推荐使用 === 和 !==。
还有 == 和 !=,它们表示检查_宽松相等_。你应该避免使用它们,因为在比较之前会进行隐式类型转换。这些情况下的结果很难预测,有时并不是你期望的样子。你可以在这里了解更多。
0 == false;
// => true
理论上,你也可以比较不同类型的值(例如 "1" < 2)。这时值会被隐式转换,以判断结果是 true 还是 false。和检查宽松相等一样,出于上面提到的相同原因,这同样不推荐。
那应该怎么做呢?你可以使用显式类型转换。这样,你就能在比较之前确保值的类型正确。你的代码也会更容易理解,更不容易出错。