# JavaScript – 相等（`==`）与身份（`===`）运算符

> 原文： [https://howtodoinjava.com/javascript/javascript-equality-vs-identity-operators/](https://howtodoinjava.com/javascript/javascript-equality-vs-identity-operators/)

如果您使用过 JavaScript，那么您一定已经注意到这两个运算符可以比较值。 许多开发人员不了解他们在特定情况下使用的正确版本。 正确的决定是基于对它们实际工作原理的了解。 让我们来了解一下。

请记住，在执行比较时，**相等运算符（`==`）将在继续进行操作之前尝试使数据类型相同**。 另一方面，**身份运算符（`===`）要求两种数据类型相同，作为前提条件**。

让我们看一个例子。 参见下面的代码：

```java
var valueOne = 3;
var valueTwo = "3";
if (valueOne == valueTwo) {
    console.log("ValueOne and ValueTwo are the same");
} else {
    console.log("ValueOne and ValueTwo are NOT the same");
}
```

你能猜出输出吗？ 您可能会感到惊讶，也可能不会感到惊讶，但是这些值被认为是相同的。

```java
Output is: ValueOne and ValueTwo are the same
```

`==`运算符之所以认为`"3"`和`3`相同，是因为在进行比较之前，它实际上将操作数（`==`运算符两侧的值）覆盖为相同的类型。

但是，如果我们**将运算符更改为身份运算符**，如此处所示，我们将看到截然不同的输出：

```java
var valueOne = 3;
var valueTwo = "3";
if (valueOne === valueTwo) {
    console.log("ValueOne and ValueTwo are the same");
} else {
    console.log("ValueOne and ValueTwo are NOT the same");
}
```

现在有了身份运算符，输出为：

```java
Output is: ValueOne and ValueTwo are NOT the same
```

由于我们在这种情况下使用了`===`运算符，并且由于该运算符未执行任何类型转换，因此我们看到字符串值`"3"`和数字`3`毕竟是不同的。

如有疑问，相对安全的选择只是出于习惯而使用身份运算符（`===`）。 当然，最安全的选择是使自己熟悉这些差异，以便您了解引擎盖下实际发生的事情。

学习愉快！