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


Posted in Javascript onApril 10, 2017

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
基于jquery的模态div层弹出效果
Aug 21 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
基于javascript实现单选及多选的向右和向左移动实例
Jul 25 Javascript
同步文本框内容JS代码实现
Aug 04 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
浅谈Vue2.0父子组件间事件派发机制
Jan 08 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
Mar 19 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 Javascript
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
javascript防篡改对象实例详解
Apr 10 #Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 #jQuery
ES6教程之for循环和Map,Set用法分析
Apr 10 #Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
You might like
PHP图片上传类带图片显示
2006/11/25 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python pickle 和 shelve模块的用法
2013/09/16 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Python正则简单实例分析
2017/03/21 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
C#中的验证控件有几种
2014/03/08 面试题
电子商务专业实习生自我鉴定
2013/09/24 职场文书
生产文员岗位职责
2014/04/05 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
法律专业求职信
2014/05/24 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
mysql查看表结构的三种方法总结
2022/07/07 MySQL