对象
更新: 2025/3/18 14:37:35 字数: 0 字
一、比较对象是否相等
JSON.stringify()
缺点:
对象中的属性必须以 ASCII 码进行排序;
无法比较包含日期或者函数对象的值;
在出现循环引用和对象顺序不一样的情况下,判断失败;Object.is()
原理:比较方式和 == 和 === 号的比较方式一致
缺点: 如果对象中包含对象/数组,比较不精准;递归比较
js
// 比较两个对象是否相等
function areEqual(obj1, obj2) {
let len_obj1 = Object.keys(obj1).length
let len_obj2 = Object.keys(obj2).length
// 1. 比较属性个数
if (len_obj1 !== len_obj2) {
return false;
}
// 2. 比较属性值
for (let key in obj1) {
// 比较下标
if (obj1.hasOwnProperty(key) !== obj2.hasOwnProperty(key)) {
return false;
}
// 比较内容
if (typeof obj1[key] !== typeof obj2[key]) {
return false;
}
// 子元素
if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {
if (!areEqual(obj1[key], obj2[key])) {
return false;
}
} else if (obj1[key] !== obj2[key]) {
return false;
}
}
return true;
}