JavaScript比较两个对象是否相等的方法


Posted in Javascript onFebruary 06, 2015

本文实例讲述了JavaScript比较两个对象是否相等的方法。分享给大家供大家参考。具体如下:

在Python中可以通过cmp()内建函数来比较两个对象所包涵的数据是否相等(数组、序列、字典)。但是在javascript语言中并没有相关的实现。本js代码通过对js对象进行各方面的比较来判断两个对象是否相等

cmp = function( x, y ) { 
// If both x and y are null or undefined and exactly the same 
if ( x === y ) { 
 return true; 
} 

// If they are not strictly equal, they both need to be Objects 
if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) { 
 return false; 
} 

//They must have the exact same prototype chain,the closest we can do is
//test the constructor. 
if ( x.constructor !== y.constructor ) { 
 return false; 
} 
 
for ( var p in x ) { 
 //Inherited properties were tested using x.constructor === y.constructor
 if ( x.hasOwnProperty( p ) ) { 
 // Allows comparing x[ p ] and y[ p ] when set to undefined 
 if ( ! y.hasOwnProperty( p ) ) { 
  return false; 
 } 

 // If they have the same strict value or identity then they are equal 
 if ( x[ p ] === y[ p ] ) { 
  continue; 
 } 

 // Numbers, Strings, Functions, Booleans must be strictly equal 
 if ( typeof( x[ p ] ) !== "object" ) { 
  return false; 
 } 

 // Objects and Arrays must be tested recursively 
 if ( ! Object.equals( x[ p ], y[ p ] ) ) { 
  return false; 
 } 
 } 
} 

for ( p in y ) { 
 // allows x[ p ] to be set to undefined 
 if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) { 
 return false; 
 } 
} 
return true; 
};

使用:

objA={ 
 a:'123', 
 b:'456' 
}; 
objB={ 
 a:'123', 
 b:'000' 
}; 
var isEqual= cmp(objA, objB); 
 console.log(isEqual);  // false 不相同

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
锋利的jQuery 要点归纳(一) jQuery选择器
Mar 21 Javascript
GreyBox技术总结(转)
Nov 23 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
全面解析Bootstrap中nav、collapse的使用方法
May 22 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
vue axios用法教程详解
Jul 23 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
iview实现select tree树形下拉框的示例代码
Dec 21 Javascript
npm 常用命令详解(小结)
Jan 17 Javascript
koa-router路由参数和前端路由的结合详解
May 19 Javascript
jquery绑定事件 bind和on的用法与区别分析
May 22 jQuery
JavaScript 异常处理 详解
Feb 06 #Javascript
jquery中change()用法实例分析
Feb 06 #Javascript
javaScript的函数对象的声明详解
Feb 06 #Javascript
javascript实用方法总结
Feb 06 #Javascript
javascript实现限制上传文件大小
Feb 06 #Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 #Javascript
javascript去除字符串左右两端的空格
Feb 05 #Javascript
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
mysql limit查询优化分析
2008/11/12 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
python config文件的读写操作示例
2019/09/27 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
个人借款担保书
2014/04/02 职场文书
大学英语专业求职信
2014/06/21 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
军人离婚协议书样本
2014/10/21 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
质量保证书格式模板
2015/02/27 职场文书
投诉信回复范文
2015/07/03 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
python如何获取网络数据
2021/04/11 Python
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫