關於比較js中兩個對象相等 ==

今天看紅寶書,裏面講到相等操作符,也就是==和===

“如果兩個操作數都是對象,則比較他們是不是同一個對象,如果兩個操作數都指向同一個對象,則相等操作符返回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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章