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 相关文章推荐
Javascript 获取滚动条位置等信息的函数
Sep 08 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
基于jquery实现动态竖向柱状条特效
Feb 12 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
Sep 22 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
Dec 11 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
详解小程序云开发攻略(解决最棘手的问题)
Sep 30 Javascript
Javascript表单序列化原理及实现代码详解
Oct 30 Javascript
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
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
php的常量和变量实例详解
2017/06/27 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
js数据类型检测总结
2018/08/05 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
判断网页编码的方法python版
2016/08/12 Python
python实现textrank关键词提取
2018/06/22 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python opencv实现证件照换底功能
2019/08/19 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
J2EE包括哪些技术
2016/11/25 面试题
军训生自我鉴定范文
2013/12/27 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
生日主持词
2014/03/20 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
党委工作总结2015
2015/04/27 职场文书
庆祝教师节主持词
2015/07/06 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书