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动态调整iframe高度的代码
Apr 10 Javascript
防止动态加载JavaScript引起的内存泄漏问题
Oct 08 Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 Javascript
javascript实现仿百度图片的瀑布流加载效果
Apr 20 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
Aug 20 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 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
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python OS模块实例详解
2019/04/15 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
写好自荐信的技巧
2013/11/08 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
大学生演讲稿
2014/04/25 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
作息时间调整通知
2015/04/22 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL