原文: https://howtodoinjava.com/javascript/javascript-equality-vs-identity-operators/

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

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

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

    1. var valueOne = 3;
    2. var valueTwo = "3";
    3. if (valueOne == valueTwo) {
    4. console.log("ValueOne and ValueTwo are the same");
    5. } else {
    6. console.log("ValueOne and ValueTwo are NOT the same");
    7. }

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

    1. Output is: ValueOne and ValueTwo are the same

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

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

    1. var valueOne = 3;
    2. var valueTwo = "3";
    3. if (valueOne === valueTwo) {
    4. console.log("ValueOne and ValueTwo are the same");
    5. } else {
    6. console.log("ValueOne and ValueTwo are NOT the same");
    7. }

    现在有了身份运算符,输出为:

    1. Output is: ValueOne and ValueTwo are NOT the same

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

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

    学习愉快!