原文: 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
foo
和 bar
的值和类型都是一样的。因此,两个的结果都是 true
。
示例 2:
const number = 1234
const stringNumber = '1234'
console.log(number == stringNumber) //true
console.log(number === stringNumber) //false
number
和 stringNumber
的值在这里看起来差不多。然而,number
的类型是 Number
,stringNumber
的类型是 String
。即使值是相同的,但类型是不一样的。因此,==
比较返回 true
,但当比较值和类型时,返回 false
。
示例 3:
console.log(0 == false) //true
console.log(0 === false) //false
原因:相同的值,不同的类型。
这是一个有趣的例子。0
的值在与 false
比较时是相同的。之所以如此,是因为 0
和 false
对于 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 中“相等”是多么复杂。

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