为什么是空函数!==空函数?

时间:2012-11-23 13:25:29

标签: javascript function

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

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

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

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

来自MDN:

  

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

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

考虑(new Number(1)) != (new Number(1)),而1 == 1

这一事实

答案 2 :(得分:2)

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

答案 3 :(得分:2)

ECMA标准给出some precise rules关于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

答案 4 :(得分:1)

来自Spec-11.9.6

严格的等式比较算法

  

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

     

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

     

2.如果Type(x)未定义,则返回true。

     

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

     

...

     

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