Heim  >  Artikel  >  Web-Frontend  >  Detailliertes Codebeispiel zur Bestimmung, ob Objekte in Javascript gleich sind

Detailliertes Codebeispiel zur Bestimmung, ob Objekte in Javascript gleich sind

伊谢尔伦
伊谢尔伦Original
2017-07-26 11:54:311890Durchsuche

Wir wissen, dass JavaScript zwei Objekte mit gleichem Inhalt als ungleich beurteilt. Aber manchmal müssen wir einfach feststellen, ob der Inhalt zweier Objekte gleich ist. Wie sollen wir das also tun und Rücksicht nehmen? Beispielsweise sind 0 und -0, null und undefiniert nicht gleich und NaN und NaN sind standardmäßig nicht gleich. Ich habe eine isEqual-Methode geschrieben und dabei viele Aspekte berücksichtigt. Der Code lautet wie folgt:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
  </body>
<script type="text/javascript">
//isEqual:判断两个对象是否键值对应相等
function isEqual(a,b){
  //如果a和b本来就全等
  if(a===b){
    //判断是否为0和-0
    return a !== 0 || 1/a ===1/b;
  }
  //判断是否为null和undefined
  if(a==null||b==null){
    return a===b;
  }
  //接下来判断a和b的数据类型
  var classNameA=toString.call(a),
    classNameB=toString.call(b);
  //如果数据类型不相等,则返回false
  if(classNameA !== classNameB){
    return false;
  }
  //如果数据类型相等,再根据不同数据类型分别判断
  switch(classNameA){
    case &#39;[object RegExp]&#39;:
    case &#39;[object String]&#39;:
    //进行字符串转换比较
    return &#39;&#39; + a ===&#39;&#39; + b;
    case &#39;[object Number]&#39;:
    //进行数字转换比较,判断是否为NaN
    if(+a !== +a){
      return +b !== +b;
    }
    //判断是否为0或-0
    return +a === 0?1/ +a === 1/b : +a === +b;
    case &#39;[object Date]&#39;:
    case &#39;[object Boolean]&#39;:
    return +a === +b;
  }
  //如果是对象类型
  if(classNameA == &#39;[object Object]&#39;){
    //获取a和b的属性长度
    var propsA = Object.getOwnPropertyNames(a),
      propsB = Object.getOwnPropertyNames(b);
    if(propsA.length != propsB.length){
      return false;
    }
    for(var i=0;i<propsA.length;i++){
      var propName=propsA[i];
      //如果对应属性对应值不相等,则返回false
      if(a[propName] !== b[propName]){
        return false;
      }
    }
    return true;
  }
  //如果是数组类型
  if(classNameA == &#39;[object Array]&#39;){
    if(a.toString() == b.toString()){
      return true;
    }
    return false;
  }
}
//test
var obj1={name:"liu",age:22};
var obj2={name:"liu",age:22};
var obj3={name:"liu",age:33};
var state1=isEqual(obj1,obj2);
var state2=isEqual(obj1,obj3);
console.log(state1);//true
console.log(state2);//false
var state3=isEqual(null,undefined);
console.log(state3);//false
var state4=isEqual(NaN,NaN);
console.log(state4);//true
var arr1=[1,2,3];
var arr2=[1,2,3];
var arr3=[1,23];
var state5=isEqual(arr1,arr2);
console.log(state5);//true
var state6=isEqual(arr1,arr3);
console.log(state6);//false
</script>
</html>

Das Laufeffektdiagramm lautet wie folgt:

Das obige ist der detaillierte Inhalt vonDetailliertes Codebeispiel zur Bestimmung, ob Objekte in Javascript gleich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn