700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 如何判断JS中两个对象是否相等?

如何判断JS中两个对象是否相等?

时间:2024-04-10 19:30:59

相关推荐

如何判断JS中两个对象是否相等?

① 方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等

优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果

缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错

② 方法二:Object.getownPropertyNames()

1.用Object.getOwnPropertyNames拿到对象的所以键名数组

2.比对键名数组的长度是否相等

3.比对键名对应的键值是否相等

缺点:对象属性是对象的情况要进行递归

未递归情况:

function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i];var propA = a[propName];var propB = b[propName];if ( propA !== propB) {return false;}}return true;}

递归情况:

function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i]var propA = a[propName]var propB = b[propName]// 这里忽略了值为undefined的情况// 故先判断两边都有相同键名if(!b.hasOwnProperty(propName)) return falseif ((propA instanceof Object)) {if (this.isObjectValueEqual(propA, propB)) {// return true这里不能return ,后面的对象还没判断} else {return false}} else if (propA !== propB) {return false} else { }}return true}var a = {id:1,name:2,c:{age:3}};var b = {id:1,name:2,c:{age:3}}console.log(isObjectValueEqual(a,b));//true

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。