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 相关文章推荐
jquery.validate使用时遇到的问题
May 25 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
angularJS Provider、factory、service详解及实例代码
Sep 21 Javascript
js定时器实例分享
Dec 20 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
Webpack性能优化 DLL 用法详解
Aug 10 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
原生js实现随机点名功能
Nov 05 Javascript
javascript中闭包closure的深入讲解
Mar 03 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 header函数使用教程
2013/09/05 PHP
PHP加密解密函数详解
2015/10/28 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
python 字段拆分详解
2019/12/17 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
化妆师职业生涯规划书
2014/02/16 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
年会主持人开场白台词
2015/05/29 职场文书
初中生物教学随笔
2015/08/15 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
Python基础之元编程知识总结
2021/05/23 Python
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers
mysql如何查询连续记录
2022/05/11 MySQL