具有相同内容的变量不相等....为什么?

时间:2013-11-02 19:21:16

标签: javascript

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

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/

1 个答案:

答案 0 :(得分:7)

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

[] === []; // false

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

  

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