關於比較js中兩個物件相等 ==
阿新 • • 發佈:2019-02-02
今天看紅寶書,裡面講到相等操作符,也就是==和===
“如果兩個運算元都是物件,則比較他們是不是同一個物件,如果兩個運算元都指向同一個物件,則相等操作符返回true,否則,返回false”。
我做了一個例子
function person() {
// define some peroperty here
}
var p1 = new person();
var p2 = new person();
console.log(p1 == p2); //false
按照他說的指向同一個物件了啊,為什麼返回的是false呢?
然後我又查了查,發現有人這樣說
“如果等號兩邊是物件或者物件的函式,則比較地址是否相等(即判斷兩者是否引用的同一物件)”
可是這裡的地址指什麼呢?
然後 有綜合了一些查詢結果,發現這裡的地址應該指的是記憶體地址。“每生成一個例項就會重新佔用一些記憶體”,所以兩次生成的person佔用的是不同的記憶體地址。所以返回結果是false。
那這樣的話怎麼樣才能用==返回true呢?我又查了一下,沒有找到特別合適的例子,指找到一個用prototype定義函式可以得到== 返回true的效果
function person(name) { this.name=name; } var p1 = new person("p1"); var p2 = new person("p2"); console.log(p1 == p2); //false person.prototype.sayHi = function() { // do sayHi here } console.log(p1.sayHi() == p2.sayHi()); //true console.log(p1.sayHi() === p2.sayHi()); //true