JS判断两个对象内容是否相等的方法示例
程序员文章站
2022-04-29 12:48:55
本文实例讲述了js判断两个对象内容是否相等的方法。分享给大家供大家参考,具体如下:
我们知道,如果两个对象即使内容,javascript也会判断它们不相等。但是有时候,我...
本文实例讲述了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>
运行效果图如下:
更多关于javascript相关内容可查看本站专题:《javascript面向对象入门教程》、《javascript中json操作技巧总结》、《javascript切换特效与技巧总结》、《javascript查找算法技巧总结》、《javascript动画特效与技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
上一篇: Java语言编码惯例