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

Sol*_*Sol 0 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?
Run Code Online (Sandbox Code Playgroud)

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?
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/3rzrR/

和这里一样

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

alert(k==b); //false
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/5v8BJ/

Ori*_*iol 7

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

[] === []; // false
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Sol**当你考虑两个对象相同时,你应该定义你的意思,并测试**.例如,您可以检查它们是否具有相同的属性(拥有/拥有+继承),如果属性是对象,您还必须决定是否使用自己的定义或引用来比较它们. (2认同)