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 相关文章推荐
JavaScript游戏之是男人就下100层代码打包
Nov 08 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
微信小程序顶部可滚动导航效果
Oct 31 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
Oct 08 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
Apr 04 Javascript
vue+elementUI实现表格关键字筛选高亮
Oct 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/03/15 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
浅析Python 中整型对象存储的位置
2016/05/16 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python中的引用知识点总结
2019/05/20 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
师范生自荐信
2013/10/27 职场文书
职业女性的职业规划
2014/03/04 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
2014年学校工作总结
2014/11/20 职场文书
档案接收函格式
2015/01/30 职场文书