多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 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`毕竟是不同的。 如有疑问,相对安全的选择只是出于习惯而使用身份运算符(`===`)。 当然,最安全的选择是使自己熟悉这些差异,以便您了解引擎盖下实际发生的事情。 学习愉快!