var x = function() {};
var y = function() {};
alert(x === y); // is false;
如果 x 都初始化为相同的值,为什么 x 不等于 y?
var x = function() {};
var y = function() {};
alert(x === y); // is false;
如果 x 都初始化为相同的值,为什么 x 不等于 y?
当您在 JavaScript 中比较对象时,您是在检查它们是否是同一个对象,而不是它们是否是相同的对象。
来自 MDN:
如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript 会比较相等的内部引用。
显然,您的对象彼此不同,并且引用不同的内存位置。等于比较运算符检查两个操作数是否引用同一个对象,而不是它们是否是副本。
考虑这样一个事实(new Number(1)) != (new Number(1))
,而1 == 1
因为它们不是同一个函数对象。比较器不查看函数体。
ECMA 标准对 JavaScript 中严格相等的工作方式给出了一些精确的规则。基本上,正如@Quentin 所说,如果您正在比较两个对象(除了 Number、String、Boolean、null 或 undefined),只有当它们是同一个对象时才返回 true。这里情况不同。
考虑这段代码:
var x = function() {};
var y = function() {};
x.something = "this is x";
y.something = "this is not x";
alert(x.something === y.something);
这会给false
.
严格等式比较算法
比较 x === y,其中 x 和 y 是值,产生真或假。如下进行这样的比较:
1.如果Type(x)与Type(y)不同,返回false。
2.如果Type(x)是Undefined,返回true。
3.如果Type(x)为Null,返回true。
...
7.如果 x 和 y 引用同一个对象,则返回 true。否则,返回假。