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第二章
Sep 30 Javascript
JavaScript入门教程(1) 什么是JS
Jan 31 Javascript
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
Jun 14 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
基于Vue的移动端图片裁剪组件功能
Nov 28 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 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添加MySQL数据记录代码
2008/06/07 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
vue.js 微信支付前端代码分享
2018/02/10 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Django REST framework内置路由用法
2019/07/26 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
项目考察欢迎辞
2014/01/17 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
租赁协议书范本
2014/04/22 职场文书
德育标兵事迹材料
2014/08/24 职场文书
篮球赛新闻稿
2015/07/17 职场文书
pt-archiver 主键自增
2022/04/26 MySQL