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 String对象
Mar 09 Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
Jan 16 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
基于Vue实现拖拽功能
Jul 29 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
JavaScript Blob对象原理及用法详解
Oct 14 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
php5 and xml示例
2006/11/22 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP文件操作详解
2016/12/30 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
python中xlrd模块的使用详解
2021/02/01 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
HTML5的语法变化介绍
2013/08/13 HTML / CSS
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
运动会通讯稿300字
2014/02/02 职场文书
物流业务员岗位职责
2014/02/08 职场文书
喝酒检查书范文
2014/02/23 职场文书
创建文明学校实施方案
2014/03/11 职场文书
安全责任协议书
2014/04/21 职场文书
小区文明倡议书
2014/05/16 职场文书
工作求职信
2014/07/04 职场文书
竞选学委演讲稿
2014/09/13 职场文书
文明家庭事迹材料
2014/12/20 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers