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 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
用Juery网页选项卡实现代码
Jun 13 Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
JSON无限折叠菜单编写实例
Dec 16 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
node.js环境搭建图文详解
Sep 19 Javascript
javascript 构建模块化开发过程解析
Sep 11 Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php array_walk() 数组函数
2011/07/12 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
php中curl使用指南
2015/02/05 PHP
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
Js sort排序使用方法
2011/10/17 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
python实现简单遗传算法
2018/03/19 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
应届生求职自荐信
2014/07/04 职场文书
户籍证明模板
2014/09/28 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js