判断两个值是否相等(原始值和数组,对象类型)
// 判断两个值是否相等 export default function isEqual(obj1, obj2) { const obj1Type = checkType(obj1); const obj2Type = checkType(obj2); // 首先判断是否类型相同 if (obj1Type !== obj2Type) { return false; } if (obj1Type === "array") { // 注意: 数组需要考虑顺序,如果顺序不同,数组不同 if (obj1.length !== obj2.length) { return false; } else { // 注意: 需要考虑多维数组和数组的项是对象类型等 return obj1.every((item,index) => isEqual(item, obj2[index])); } } if (obj1Type === "object") { // 对象本身无序,不需要考虑顺序 const obj1Keys = Object.keys(obj1); const obj2Keys = Object.keys(obj2); if (obj1Keys.length !== obj2Keys.length) { return false; } else { // 注意:需要考虑对象嵌套情况 const newSetObj2Keys = new Set(obj2Keys) for (let i in obj1) { if (obj1.hasOwnProperty(i)) { if (!newSetObj2Keys.has(i)) return false; if (!isEqual(obj1[i], obj2[i])) return false; } } return true; } } return Object.is(obj1, obj2); } export function checkType(data) { return Object.prototype.toString.call(data).toLowerCase().slice(8, -1); }