JavaScript 比较运算符

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

JavaScript 比较运算符简介

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

运算符意义
<小于
>大于
<=小于或等于
>=大于或等于
==等于
!=不等于

比较运算符返回一个 布尔 值,指示比较是否为真。请看下面的示例

let r1 = 20 > 10; // true
let r2 = 20 < 10; // false
let r3 = 10 == 10; // trueCode language: JavaScript (javascript)
Javascript Comparison Operators

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

比较数字

如果值为数字,比较运算符将执行数值比较。例如

let a = 10, 
    b = 20; 

console.log(a >= b);  // false
console.log(a == 10); // trueCode language: JavaScript (javascript)

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

比较字符串

如果操作数为字符串,JavaScript 将按字符串中字符的字符代码逐个进行数值比较。

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

let result = name1 < name2;
console.log(result); // true
console.log(name1 == 'alice'); // trueCode language: JavaScript (javascript)

由于 JavaScript 按字符串中字符的字符代码进行数值比较,您可能会得到意外的结果,例如

let f1 = 'apple',
    f2 = 'Banana';
let result = f2 < f1;
console.log(result); // trueCode language: JavaScript (javascript)

在此示例中,f2 小于 f1,因为字母 B 的字符代码为 66,而字母 a 的字符代码为 97

要解决此问题,您需要

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

例如

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

let result = f2.toLowerCase() < f1.toLowerCase();
console.log(result); // falseCode language: JavaScript (javascript)

请注意,toLowerCase() 是 String 对象的方法,用于将字符串转换为小写。

比较数字与其他类型的数值

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

console.log(10 < '20'); // trueCode language: JavaScript (javascript)

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

console.log(10 == '10'); // trueCode language: JavaScript (javascript)

在此示例中,比较运算符将字符串 '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
Code language: JavaScript (javascript)

在第一个比较中,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); // trueCode language: JavaScript (javascript)

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

比较 null 和 undefined

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

console.log(null == undefined); // trueCode language: JavaScript (javascript)

比较 NaN 与其他值

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

console.log(NaN == 1); // falseCode language: JavaScript (javascript)

即使

console.log(NaN == NaN); // falseCode language: JavaScript (javascript)

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

console.log(NaN != 1); // trueCode language: JavaScript (javascript)

以及

console.log(NaN != NaN); // trueCode language: JavaScript (javascript)

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

除了上面的比较运算符之外,JavaScript 还提供严格等于 ( ===) 和不严格等于  ( !==) 运算符。

运算符意义
===严格等于
!==不严格等于

严格等于和不严格等于运算符的行为与等于和不等于运算符类似,不同之处在于它们在比较之前不会转换操作数。请看下面的示例

console.log("10" == 10); // true
console.log("10" === 10); // falseCode language: JavaScript (javascript)

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

但是,在第二个比较中,我们使用的是严格相等运算符 ( ===),JavaScript 在比较之前不会转换字符串,因此结果为 false

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

本教程是否有帮助?