function diff(obj1, obj2) { if(typeof obj1 !== typeof obj2) { return false; } else { switch (typeof obj1) { case "number": case "string": case "boolean": return obj1 === obj2; case "object": if(obj1 instanceof Array) { return obj1.equals(obj2); } else { return equalsObj(obj1, obj2); } } } } console.log(diff(1,1)); console.log(diff(1, "1")); console.log(diff({name: "cvte"}, {name: "cvte"})); console.log(diff({name: "cvte"}, {name: "simth"}));
// 判断两个数组是否是相等 function equalsObj(obj1, obj2) { for(propName in obj1) { if(obj1.hasOwnProperty(propName) !== obj2.hasOwnProperty(propName)) { return false; } else if(typeof obj1[propName] !== typeof obj2[propName]) { return false; } } for(propName in obj2) { if(obj2.hasOwnProperty(propName) !== obj1.hasOwnProperty(propName)) { return false; } else if(typeof obj2[propName] !== typeof obj1[propName]) { return false; } if(!obj2.hasOwnProperty(propName)) { continue; } if(obj1[propName] instanceof Array && obj2[propName] instanceof Array) { if(!equalsObj(obj1[propName], obj2[propName])){ return false; } else if(obj1[propName] instanceof Object && obj2[propName] instanceof Object) { if(!equalsObj(obj1[propName], obj2[propName])) { return false; } } } else if(obj1[propName] !== obj2[propName]) { return false; } } return true; } // 判断两个数组是否需相等 Array.prototype.equals = function(arr) { if(!arr) { return false; } if(this.length !== arr.length) { return false; } for(let i = 0, l = arr.length; i< l; i++) { if(this[i] !== arr[i]) { return false; } else if(this[i] instanceof Array && arr[i] instanceof Array) { if(!this[i].equals(arr[i])) { return false; } } } return true; }