2017-02-23 45 views
0

Object.is()方法確定兩個值是否具有相同的 值。爲什麼在比較2個「確切」JavaScript對象值時,Object.is()返回false?

返回值:一個布爾值,指示兩個參數 的值是否相同。

Object.is('hello', 'hello'); // true 
Object.is(1, 1); // true 
Object.is(null, null); // true 

我也看到了MDN,我可以用「窗口」對象一樣使用它:

Object.is(window, window); // true 

當我試圖

我可以用簡單的類型,如測試Object.is()比較兩個簡單的「確切」值,它似乎不工作(或者我可能以錯誤的方式使用它)

有這2個簡單的目標cts:

var o1 = {a: "a"}; 
var o2 = {a: "a"}; 

所有這些比較返回false!

Object.is(o1, o2); // false 
Object.is(o1, {a: "a"}); // false 
Object.is({a: "a"}, {a: "a"}); // false 

您可以通過解釋爲什麼幫忙,結果是假的,不然我如何以錯誤的方式使用Object.is()

+2

因爲它們不是同一個對象。 'var o1 = {a:「a」}; var o2 = o1; Object.is(o1,o2);' – epascarello

+0

請參閱[MDN]上的此表(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#A_model_for_understanding_equality_comparisons) – barbsan

回答

2

這是因爲它們不是同一個參考。

注意:

var o1 = {a: "a"}; 
var o2 = o2; 
Object.is(o1, o2); 

結果true

0

之所以這樣,是因爲當我們有一個對象時,我們存儲的是引用而不是值本身。如果您將windowwindow進行比較,它們將指向相同的對象引用。

您可以使用https://lodash.com/docs/4.17.4#isEqual 來比較對象值。

0

兩個不同的對象永遠不會是「完全相同」。對象平等基於身份而不是內容。如果您的應用程序中有關於代表概念上相同信息的對象的一些語義,您可以編寫自己的比較代碼來做出決定。

在您的代碼中,每個{ }對象初始值設定項創建一個不同的對象。

相關問題