// 用递归实现比较任意两个数据
// 只对普通对象、数组、函数、日期和基本类型的数据结构进行对比
// function isDeepEqual(obj1, obj2, testPrototypes = false) {
//   // 判断是不是基本类型
//   if (obj1 === obj2) {
//     return true
//   };
//   // 如果是函数
//   if (typeof obj1 === "function" && typeof obj2 === "function") {
//     return obj1.toString() === obj2.toString()
//   };
//   // 如果是时间对象
//   if (obj1 instanceof Date && obj2 instanceof Date) {
//     return obj1.getTime() === obj2.getTime()
//   };
//   // 区分非基础数据类型
//   if (
//     Object.prototype.toString.call(obj1) !== Object.prototype.toString.call(obj2) || typeof obj1 !== "object") {
//     return false
//   };
//   // 获取指定对象的原型对象
//   const prototypesAreEqual = testPrototypes ?
//     isDeepEqual(Object.getPrototypeOf(obj1), Object.getPrototypeOf(obj2), true) : true;
//
//   // 获取两个对象的键值数组
//   const obj1Props = Object.getOwnPropertyNames(obj1)
//   const obj2Props = Object.getOwnPropertyNames(obj2)
//   // 判断两个对象键值数组长度是否一致 遍历对象键值且键值是否相等
//   return (obj1Props.length === obj2Props.length && prototypesAreEqual && obj1Props.every(prop => isDeepEqual(obj1[prop], obj2[prop])))
// }
