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 相关文章推荐
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 Javascript
js中apply方法的使用详细解析
Nov 04 Javascript
js中精确计算加法和减法示例
Mar 28 Javascript
javascript初学者常用技巧
Sep 02 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
js对象基础实例分析
Jan 13 Javascript
jQuery实现设置、移除文本框默认值功能
Jan 13 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
Mar 30 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 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常用技术文之文件操作和目录操作总结
2014/09/27 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
Python中Qslider控件实操详解
2021/02/20 Python
考试违纪检讨书
2014/02/02 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
治庸问责心得体会
2014/09/12 职场文书
企业整改报告范文
2014/11/08 职场文书
2014年统战工作总结
2014/12/09 职场文书
搬迁通知
2015/04/20 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS