# 相等运算符（`==`）与严格相等运算符（`===`）

> 原文： [https://howtodoinjava.com/typescript/equals-vs-strict-equals/](https://howtodoinjava.com/typescript/equals-vs-strict-equals/)

在 TypeScript（和 JavaScript）中，您可以与*相等运算符*（`'=='`）或*严格相等运算符*（`'==='`）比较。 两者似乎几乎相似； 但是他们比较两个值的方式却大不相同。

## 相等运算符（`==`）

使用相等运算符比较 `x == y`（其中`x`和`y`是值）会产生`true`或`false`。 要知道的重要一点是，在比较两个值时，JavaScript 运行时将执行类型转换以使两个值都具有相同的类型。

例如，如果尝试将`string`值与`number`值进行比较，则`string`值将首先转换为`number`类型，然后进行比较。

```java
"10" == 10		

//becomes

ToNumber("10") === 10

```

> 阅读更多：[完全相等比较算法](https://ecma-international.org/ecma-262/5.1/#sec-11.9.3)

让我们看一个例子。

```java
let a = 10;

a == 10					//true
a == '10'				//true

```

查看上面示例中的最后两个语句。 变量`'a'`如何等于`number 10`和`string '10'`。

## 严格相等运算符（`===`）

使用相等运算符比较 `x === y`，其中`x`和`y`是值，仅在以下情况下才产生`true`或`false`：

1.  `x`和`y`的类型相同
2.  `x`和`y`的值相等

让我们看一个例子。

```java
let a = 10;

a === 10					//true
a === '10'					//false

```

在这种情况下，比较存储`number 10`的变量不等于`string 10`。

## 使用哪个运算符？

作为建议，建议**始终使用严格相等运算符**。 这很有帮助，因为

1.  您无需在检查相等性时记住类型转换规则。
2.  如预期的那样，比较不同的数据类型应为`false`。
3.  由于上述事实，源代码不太容易出错。

将我的问题放在评论部分。

学习愉快！