0

両方の変数の内容が等しい場合に false を受け取るのはなぜですか?

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によると、

両方のオペランドが objectである場合、JavaScript は、オペランドがメモリ内の同じオブジェクトを参照する場合に等しい内部参照を比較します。

于 2013-11-02T19:23:19.550 に答える