欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS判断两个对象内容是否相等的方法示例

程序员文章站 2022-04-29 12:48:55
本文实例讲述了js判断两个对象内容是否相等的方法。分享给大家供大家参考,具体如下: 我们知道,如果两个对象即使内容,javascript也会判断它们不相等。但是有时候,我...

本文实例讲述了js判断两个对象内容是否相等的方法。分享给大家供大家参考,具体如下:

我们知道,如果两个对象即使内容,javascript也会判断它们不相等。但是有时候,我们仅仅需要判断两个对象的内容是否相等。那么我们应该如何做到且考虑周全呢?比如说0和-0,null和undefined,是不相等的,nan和nan默认是不相等的。我写了一个isequal方法,考虑到了诸多方面,代码如下:

<!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 '[object regexp]':
    case '[object string]':
    //进行字符串转换比较
    return '' + a ==='' + b;
    case '[object number]':
    //进行数字转换比较,判断是否为nan
    if(+a !== +a){
      return +b !== +b;
    }
    //判断是否为0或-0
    return +a === 0?1/ +a === 1/b : +a === +b;
    case '[object date]':
    case '[object boolean]':
    return +a === +b;
  }
  //如果是对象类型
  if(classnamea == '[object object]'){
    //获取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 == '[object array]'){
    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>

运行效果图如下:

JS判断两个对象内容是否相等的方法示例

更多关于javascript相关内容可查看本站专题:《javascript面向对象入门教程》、《javascript中json操作技巧总结》、《javascript切换特效与技巧总结》、《javascript查找算法技巧总结》、《javascript动画特效与技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。