对象不可以直接==判断是否相等,由于对象是由键值对构成的,那要判断对象相等,只要判断两个对象的键、值是否都相同,如果相同就代表它们相等,反之不相等。
思路:
使用Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
比对键名数组的长度是否相等,不相等则返回false。相等进行下一步。
比对键名对应的键值是否相等。
let onj1 = {
a: 1,
b: 2
}
let onj2 = {
b: 2,
a: 1
}
function isObjectValueEqual(a, b) {
var aProps = Object.getOwnPropertyNames(a);//得到aProps值为['a','b']
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;
}
console.log(isObjectValueEqual(onj1, onj2)) // true