var x = function() {};
var y = function() {};
alert(x === y); // is false;
如果x初始化为相同的值,为什么x不等于y?
答案 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。