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


“如果兩個操作數都是對象,則比較他們是不是同一個對象(引用的對象在內存中的地址一樣),如果兩個操作數都指向同一個對象,則相等操作符返回true,否則,返回false”。

我做了一個例子

  1. function person() {  
  2.     // define some peroperty here  
  3. }  
  4.   
  5. var p1 = new person();  
  6. var p2 = new person();  
  7.   
  8. console.log(p1 == p2); //false  


按照他說的指向同一個對象了啊,為什么返回的是false呢?

 

然后我又查了查,發現有人這樣說

“如果等號兩邊是對象或者對象的函數,則比較地址是否相等(即判斷兩者是否引用的同一對象)”

可是這里的地址指什么呢?

然后 有綜合了一些查詢結果,發現這里的地址應該指的是內存地址。“每生成一個實例就會重新占用一些內存”,所以兩次生成的person占用的是不同的內存地址。所以返回結果是false。

 

那這樣的話怎么樣才能用==返回true呢?我又查了一下,沒有找到特別合適的例子,指找到一個用prototype定義函數可以得到== 返回true的效果

 

    1. function person(name) {  
    2.     this.name=name;  
    3. }  
    4.   
    5. var p1 = new person("p1");  
    6. var p2 = new person("p2");  
    7.   
    8. console.log(p1 == p2); //false  
    9.               
    10. person.prototype.sayHi = function() {  
    11.     // do sayHi here  
    12. }  
    13.   
    14. console.log(p1.sayHi() == p2.sayHi()); //true  
    15. console.log(p1.sayHi() === p2.sayHi()); //true  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM