原文: JavaScript Triple Equals Sign VS Double Equals Sign – Comparison Operators Explained with Examples

你可能在 JavaScript 中见过双等号和三等号。但它们是什么意思呢?

简而言之:本质上 == 是转换类型,而 === 并不转换类型。

双等号(==)只比较值是否相等。它本质上是做类型转换。这意味着在比较数值之前,它将变量的类型转换为相互匹配。

另一方面,三等号(===)不执行类型转换。它将验证被比较的变量是否具有相同的值和相同的类型。

好的,让我们通过几个例子来帮助你更好地理解两者的区别。对于每一个例子,考虑这些语句的输出将是什么。

示例 1:

const foo = "test" 
const bar = "test"  

console.log(foo == bar) //true
console.log(foo === bar) //true                            

foobar 的值和类型都是一样的。因此,两个的结果都是 true

示例 2:

const number = 1234 
const stringNumber = '1234'  

console.log(number == stringNumber) //true
console.log(number === stringNumber)  //false                                   

numberstringNumber 的值在这里看起来差不多。然而,number 的类型是 NumberstringNumber 的类型是 String。即使值是相同的,但类型是不一样的。因此,== 比较返回 true,但当比较值和类型时,返回 false

示例 3:

console.log(0 == false) //true
console.log(0 === false) //false                  

原因:相同的值,不同的类型。

这是一个有趣的例子。0 的值在与 false 比较时是相同的。之所以如此,是因为 0false 对于 JavaScript 来说有相同的值,但是当比较类型和值时,值是 false,因为 0 是一个数字,false 是布尔值。

示例 4:

const str = ""

console.log(str == false) //true
console.log(str === false) //false

在 JavaScript 中,空字符串和 false 的值是一样的。因此,== 返回 true。然而,类型是不同的,因此 === 返回 false

什么时候应该使用 ==,什么时候应该使用 ===?

有疑问时,请使用 ===。 这将使你避免大量的潜在错误。

如果一个用例对传入数据的类型稍有宽松,那么就使用 ==。 例如,如果一个 API 同时接受来自客户端的 "true"true,就使用 ==。 简而言之,除非你有一个必须使用 == 的用例,否则不要使用 ==

这里有一个方便的 JavaScript 真值表供你参考。你将看到在 JavaScript 中“相等”是多么复杂。

image-6
Source: https://dorey.github.io/JavaScript-Equality-Table/

如果你喜欢这篇文章,请在 Twitter 上关注我的更新。