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 验证表单(form)中多选框(checkbox)值
Sep 08 Javascript
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
JavaScript实现三阶幻方算法谜题解答
Dec 29 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
Vue.js添加组件操作示例
Jun 13 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 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导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
如何在PHP中使用数组
2020/06/09 PHP
htm调用JS代码
2007/03/15 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python 实现二维列表转置
2019/12/02 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
九州传奇上机题
2014/07/10 面试题
大学四年的个人自我评价
2014/01/14 职场文书
小学国庆节活动方案
2014/02/11 职场文书
班级旅游计划书
2014/05/03 职场文书
分公司经理任命书
2014/06/05 职场文书
企业法人代表任命书
2014/06/06 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
创优争先心得体会
2014/09/11 职场文书
大学生读书笔记大全
2015/07/01 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
Python进行区间取值案例讲解
2021/08/02 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
Mysql数据库group by原理详解
2022/07/07 MySQL