js中物件的比較:只有地址相同才相等
阿新 • • 發佈:2019-02-09
最近和朋友進行了長達5分鐘的學術交流,突然間對物件的比較有了清晰的理解,所以整理了一下恍然大悟的一些理解,分享粗來。
提問:
var a = new Object();
var b = new Object();
a.name = "mm";
b.name = "mm";
var c = a;
var d = a;
1、a == b
2、a == c
3、a == d
4、b == c
5、b == d
這5個表示式的結果是什麼?為什麼?
這個問題在這次交流之前,我一直都是模稜兩可的,直覺告訴我 a == b 是false,但是為什麼是,說不出來,只是憑藉著女孩子那虛無縹緲的第六感而下的結論。這5個表示式的答案是:false、true、true、false、false。接下來,來分析一下。
a與b都是例項化出來的物件,並且它們擁有的屬性一致,屬性值也相等,但是 a == b 確實 false,是因為a、b創建出來的時候的地址是不一樣的,物件相比較等於物件的地址相比較,但一旦物件的地址建立了,就無法更改,無論是賦值給另一個還是其他的方法都無法更改。這麼講解好像很抽象,所以畫了個圖來幫助理解,加深印象。
希望可以給和之前的我有一樣困惑的小夥伴們一點啟發!