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 相关文章推荐
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 Javascript
js键盘事件的keyCode
Jul 29 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
Mar 01 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
Vue2.0系列之过滤器的使用
Mar 01 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
微信小程序实现单列下拉菜单效果
Apr 25 Javascript
Element Dropdown下拉菜单的使用方法
Jul 26 Javascript
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程序实现支持页面后退的两种方法
2008/06/30 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
使用js 设置url参数
2013/07/08 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
简单谈谈React中的路由系统
2017/07/25 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
计算机求职信
2013/12/01 职场文书
农村党支部先进事迹
2014/01/14 职场文书
小学国庆节活动方案
2014/02/11 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
教师节学生演讲稿
2014/09/03 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
教师三严三实心得体会
2014/10/11 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技