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 自定义的联动下拉框
Feb 07 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
javascript下拉列表中显示树形菜单的实现方法
Nov 17 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
Angular Module声明和获取重载实例代码
Sep 14 Javascript
深入理解JavaScript中的尾调用(Tail Call)
Feb 07 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 Javascript
javascript使用链接跨域下载图片
Nov 01 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
JavaScript字符串对象
2017/01/14 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python实现网站表单提交和模板
2019/01/15 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python 经典数字滤波实例
2019/12/16 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Django重设Admin密码过程解析
2020/02/10 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
打架检讨书2000字
2014/02/22 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python