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对URL字符串进行编码/解码分析
Oct 25 Javascript
javascript window对象属性整理
Oct 24 Javascript
js前台判断开始时间是否小于结束时间
Feb 23 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
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中数据的批量导入(csv文件)
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python heapq使用详解及实例代码
2017/01/25 Python
python采集微信公众号文章
2018/12/20 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
如何使用Python调整图像大小
2020/09/26 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
会计顶岗实习心得
2014/01/25 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
财务会计专业求职信
2014/06/09 职场文书
青年志愿者活动感想
2015/08/07 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Python Django 后台管理之后台模型属性详解
2021/04/25 Python