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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
写js时遇到的一些小问题
Dec 06 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
写出高效jquery代码的19条指南
Mar 19 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
JavaScript闭包实例详解
Jun 03 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
最后说说Vue2 SSR 的 Cookies 问题
May 25 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
Mar 25 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
adodb与adodb_lite之比较
2006/12/31 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
一道python走迷宫算法题
2018/01/22 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
pytorch进行上采样的种类实例
2020/02/18 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
武汉瑞得软件笔试题
2015/10/27 面试题
大学应届毕业生个人求职信
2013/09/23 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
2014年纪检工作总结
2014/11/12 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
Python实现Hash算法
2022/03/18 Python
Android实现图片九宫格
2022/06/28 Java/Android
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers