JavaScript – 相等(==)与身份(===)运算符

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

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

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

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");
}

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

Output is: ValueOne and ValueTwo are the same

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

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

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");
}

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

Output is: ValueOne and ValueTwo are NOT the same

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

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