先判断两个参数是否全等,全等return true;否则取两个参数的prototypeNames数组,长度不等必然不全等,return false,循环其一数组,判断类型,如果是对象类型继续调用方法(与深拷贝类似)。(未处理数组类型,待完善)

    1. function deepEqual (first, second) {
    2. if (first === second) {
    3. return true;
    4. }
    5. // let arr1 = Object.keys(first);
    6. let arr1 = Object.getOwnPropertyNames(first);
    7. let arr2 = Object.getOwnPropertyNames(second);
    8. if (arr1.length !== arr2.length) {
    9. return false;
    10. }
    11. for (let i = 0; i < arr1.length; i++) {
    12. let key = arr1[i];
    13. if (typeof first[key] === 'object') {
    14. deepEqual(first[key], second[key]);
    15. } else {
    16. return first[key] === second[key];
    17. }
    18. }
    19. }