实现
const equal = (a, b) => {
const typeA = getType(a);
const typeB = getType(b);
if (typeA !== typeB) {
return false;
}
if (a == null || b == null) {
return a === b;
}
if (['object', 'array'].indexOf(typeA) === -1) {
return a.toString() === b.toString();
}
if (Object.keys(a).length !== Object.keys(b).length) {
return false;
}
if (isCyclic(a) && isCyclic(b)) {
return equal(a, b);
}
for (let k in b) {
if (hasProp(a, k) !== hasProp(b, k)) {
return false;
}
if (!equal(a[k], b[k])) {
return false;
}
}
return true;
};
使用
equal(a, b);
示例
const a = {
num: 12,
str: 'hello',
nul: null,
arr: [
{
name: 'a1',
children: [1, 'hi'],
},
],
obj: {
name: 'obj',
age: 22,
oa1: [2, null, 'oa1'],
oa2: {
name: 'test',
},
},
};
const b = {
num: 12,
str: 'hello',
nul: null,
arr: [
{
name: 'a1',
children: [1, 'hi'],
},
],
obj: {
name: 'obj',
age: 22,
oa1: [2, null, 'oa1'],
oa2: {
name: 'test',
},
},
};
equal(a, b);

演示地址:ihuxy.com/play?utils=…