0
var x = function() {};
var y = function() {};

alert(x === y); // is false;

如果 x 都初始化为相同的值,为什么 x 不等于 y?

4

5 回答 5

8

当您在 JavaScript 中比较对象时,您是在检查它们是否是同一个对象,而不是它们是否是相同的对象

于 2012-11-23T13:36:07.660 回答
4

来自 MDN:

如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript 会比较相等的内部引用。

显然,您的对象彼此不同,并且引用不同的内存位置。等于比较运算符检查两个操作数是否引用同一个对象,而不是它们是否是副本。

考虑这样一个事实(new Number(1)) != (new Number(1)),而1 == 1

于 2012-11-23T13:36:25.587 回答
2

因为它们不是同一个函数对象。比较器不查看函数体。

于 2012-11-23T13:36:25.780 回答
2

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.

于 2012-11-23T13:46:48.687 回答
1

规范 11.9.6

严格等式比较算法

比较 x === y,其中 x 和 y 是值,产生真或假。如下进行这样的比较:

1.如果Type(x)与Type(y)不同,返回false。

2.如果Type(x)是Undefined,返回true。

3.如果Type(x)为Null,返回true。

...

7.如果 x 和 y 引用同一个对象,则返回 true。否则,返回假。

于 2012-11-23T13:47:05.407 回答