JavaScript判斷兩個變數是否相等

antzone發表於2018-07-10

本章節介紹一下如何判斷兩個變數是否相等。

下面就分享一段程式碼例項,並詳細接介紹一下它的實現過程。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
Object.equals=function(x,y){ 
  if(x===y){ 
    return true; 
  } 
  
  if(!(x instanceof Object) || ! (y instanceof Object)){ 
    return false; 
  } 
  if(x.constructor!==y.constructor){ 
    return false; 
  } 
   
  for(var p in x){ 
    if(x.hasOwnProperty(p)){ 
      if(! y.hasOwnProperty(p)){ 
        return false; 
      } 
  
      if(x[p]===y[p]){ 
        continue; 
      } 
  
      if(typeof( x[ p ] ) !== "object"){ 
        return false; 
      } 
      if(! Object.equals(x[p], y[p])){ 
        return false; 
      } 
    } 
  } 
  
  for(p in y){ 
    if (y.hasOwnProperty(p) && ! x.hasOwnProperty(p)){ 
      return false; 
    } 
  } 
  return true; 
};
obj={ 
 webName:'螞蟻部落',
 url:'softwhy.com'
}; 
antzone={ 
 webName:'螞蟻部落', 
 b:'163.com'
}; 
console.log(Object.equals(obj,antzone));

上面的程式碼實現了判斷功能,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).Object.equals=function(x,y){},定義了一個函式用來實現比對功能,兩個引數分別是要比對的值。

(2).if(x===y){ 

  return true; 

}如果兩個值全等,那麼毫無因為就是相等的,返回值為true。

(3).if(!(x instanceof Object) || ! (y instanceof Object)){ 

  return false; 

},如果兩個值不是全等的,那麼必須是物件,如果不是物件那麼說明兩個值不可能相等,返回false。

(4).if(x.constructor!==y.constructor){ 

  return false; 

},如果兩個兩個物件的建構函式不同,那麼也返回false。

(5).for(var p in x){},遍歷物件的每一個成員。

(6).if(x.hasOwnProperty(p)){},判斷屬性是否是物件的自有屬性。

(7).if(! y.hasOwnProperty(p)){ 

  return false; 

},如果第二個物件沒有此值,那麼就返回false。

(8).if(x[p]===y[p]){ 

  continue; 

},如果兩個值全等,那麼非常OK,繼續進行下一次遍歷。

(9).if(typeof( x[ p ] ) !== "object"){ 

  return false; 

},如果兩個值不全等,但也不是物件,那麼就返回false。

(10).if(! Object.equals(x[p], y[p])){ 

  return false; 

} 如果兩個都是物件,那麼再遞迴呼叫此方法。

二.相關閱讀

(1).instanceof參閱JavaScript instanceof一章節。

(2).constructor參閱JavaScript constructor一章節。

(3).for in語句參閱JavaScript for in一章節。

(4).hasOwnProperty方參閱JavaScript hasOwnProperty()一章節。

相關文章