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 相关文章推荐
Prototype Hash对象 学习
Jul 19 Javascript
js中精确计算加法和减法示例
Mar 28 Javascript
Javascript基础教程之关键字和保留字汇总
Jan 18 Javascript
JavaScript动态改变div属性的实现方法
Jul 22 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
Vue实现表格批量审核功能实例代码
May 28 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 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中的字符串函数
2006/11/24 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Django之模型层多表操作的实现
2019/01/08 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Keras搭建自编码器操作
2020/07/03 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
最新销售员个人自荐信
2013/09/21 职场文书
航空大学应届生求职信
2013/11/10 职场文书
中学生个人自我评价
2014/02/06 职场文书
卖房协议书
2014/04/11 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android