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学习2 选择器的使用说明
Feb 07 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
详解JavaScript的Date对象(制作简易钟表)
Apr 07 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
强大的 Angular 表单验证功能详细介绍
May 23 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 Javascript
微信小程序点击滚动到指定位置的实现
May 22 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的日期与时间函数技巧
2008/04/24 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
Python高效编程技巧
2013/01/07 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
Python温度转换实例分析
2018/01/17 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
舞蹈教师自荐信
2014/01/27 职场文书
个人担保书格式范文
2014/05/12 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript