在本教程中,您将学习如何使用 JavaScript 比较运算符来比较两个值。

JavaScript 比较运算符简介

要比较两个值,您可以使用比较运算符。下表显示了 JavaScript 的比较运算符:

Operator 意义
< 少于
> 大于
<= 小于或等于
>= 大于或等于
== 等于
!= 不等于

比较运算符返回一个布尔值,指示比较是否为真。请参阅以下示例:

let r1 = 20 > 10; // true
let r2 = 20 < 10; // false
let r3 = 10 == 10; // true

比较运算符采用两个值。如果值的类型不可比较,则比较运算符会根据特定规则将它们转换为可比较类型的值。

比较数字

如果值是数字,则比较运算符执行数字比较。例如:

let a = 10, 
    b = 20; 

console.log(a >= b);  // false
console.log(a == 10); // true

这个例子很简单。变量 a10b20。表达式 a >= b 返回 false,表达式 a == 10 表达式返回 true

比较字符串

如果比较的值是字符串,JavaScript 将字符串的字符 ASCII 值逐一进行数字比较。

let name1 = 'alice',
    name2 = 'bob';    

let result = name1 < name2;
console.log(result); // true
console.log(name1 == 'alice'); // true

因为 JavaScript 以 字符的 ASCII 数字方式比较字符串,您可能会收到意想不到的结果,例如:

let f1 = 'apple',
    f2 = 'Banana';
let result = f2 < f1;
console.log(result); // true

在这个例子中,f2 小于是 f1 因为字母 B 字符 ASCII 值是 66 而字母 a 字符ASCII 值是 97

要解决此问题,您需要:

  • 首先,将字符串转换为通用格式,小写或大写
  • 然后、比较转换后的值

例如:

let f1 = 'apple',
    f2 = 'Banana';

let result = f2.toLowerCase() < f1.toLowerCase();
console.log(result); // false
请注意,String 对象的 toLowerCase() 方法将字符串转换为小写。

将数字与另一种类型的值进行比较

如果一个值是数字而另一个不是,比较运算符会将非数字值转换为数字并进行数字比较。例如:

console.log(10 < '20'); // true

在此示例中,比较运算符将字符串 '20' 转换为数字 20 并与数字 10 进行比较。这是一个示例:

console.log(10 == '10'); // true

在此示例中,比较运算符将字符串 '10'  转换为数字 10 并进行数值比较。

将对象与非对象进行比较

如果一个值是一个对象, 则调用对象的 valueOf() 方法返回值进行比较。如果对象没有 valueOf() 方法,则调用对象的 toString() 方法。例如:

let apple = {
  valueOf: function () {
    return 10;
  },
};

let orange = {
  toString: function () {
    return '20';
  },
};
console.log(apple > 10); // false
console.log(orange == 20); // true

在第一次比较中,apple 对象具有 valueOf() 方法返回 10。因此,比较运算符使用数字 10 进行比较。

在第二次比较中,JavaScript 首先调用 valueOf() 方法。但是,orange 对象没有valueOf() 方法。于是 JavaScript 调用对象的 toString() 方法获取的返回值 20 进行比较。

将布尔值与另一个值进行比较

如果一个值是布尔值,JavaScript 会将其转换为数字并将转换后的值与另一个值进行比较;true转换为1false转换为0。 例如:

console.log(true > 0); // true
console.log(false < 1); // true
console.log(true > false); // true
console.log(false > true); // false
console.log(true >= true); // true
console.log(true <= true); // true
console.log(false <= false); // true
console.log(false >= false); // true

除上述规则外,等于 == 和不等于!= 运算符还有以下规则。

比较 null 和 undefined

在 JavaScript 中,null 等于 undefined。这意味着下面的表达式返回true.

console.log(null == undefined); // true

NaN 与 其他值比较

如果任一值为 NaN,则运算符 == 返回 false

console.log(NaN == 1); // false

甚至 NaN == NaN 也是返回 false

console.log(NaN == NaN); // false

NaN 与另一个值比较时,不等于 != 运算符返回 true

console.log(NaN != 1); // true

并且 NaN != NaN

console.log(NaN != NaN); // true

严格等于 === 和不严格等于 !==

除了上面的比较运算符,JavaScript 还提供了严格等于 === 和非严格等于 !==运算符。

Operator意义
===严格相等
!==不严格相等

严格等于和不严格等于运算符的行为类似于等于和不等于运算符,只是它们在比较之前不转换值。请参阅以下示例:

console.log("10" == 10); // true
console.log("10" === 10); // false

在第一次比较中,由于我们使用了相等运算符,JavaScript 将字符串转换为数字并执行比较。

但是,在第二次比较中,我们使用了严格的等于运算符 ===,JavaScript 在比较之前不会对字符串进行转换,因此结果是 false

结论

在本教程中,您学习了如何使用 JavaScript 比较运算符来比较值。