0

如果两个变量的内容相同,为什么我会收到错误消息?

function A() { return {k:'k'}; }
function B() { return {k:'k'}; }

var a = new A;
var b = new B;

 var s='';

for (prop in a) {
   if (typeof a[prop] != "function") {
       s += "a[" + prop + "] = " + a[prop] + "; ";
   }
}
alert(s);


for (prop in b) {
   if (typeof b[prop] != "function") {
       s += "b[" + prop + "] = " + b[prop] + "; ";
   }
}
alert(s);


alert( a == b ); // false?

http://jsfiddle.net/wZjPg/

即使我同时分配 a 和 b 相同的功能也会发生同样的情况

var obj = {};

function A() { return {k:'k'}; }

var a = new A;
var b = new A;

alert( a == b ); // false?

http://jsfiddle.net/3rzrR/

和这里一样

k={zor:1};
b={zor:1};

alert(k==b); //false

http://jsfiddle.net/5v8BJ/

4

1 回答 1

7

这是因为对象是通过引用进行比较的。

[] === []; // false

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

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

于 2013-11-02T19:23:19.550 回答