2013-11-02 109 views
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/

+2

您正在比較對象而不是屬性。 – 2013-11-02 19:23:41

回答

7

這是因爲通過引用來比較對象。

[] === []; // false 

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

如果兩個操作數都對象,然後JavaScript的比較內部 引用時操作數指代相同的對象中 存儲器中是相等的。

+0

所以我必須手動檢查所有屬性? – Sol

+2

@Sol **當你考慮兩個對象相同時,你應該定義你的意思,然後測試**。例如,您可以檢查它們是否具有相同的屬性(自己/自己的+繼承),如果屬性是對象,則您必須決定是否使用自己的定義或引用來比較它們。 – Oriol

相關問題