話說,說什么呢,先看下題吧還是、
` function checkName(data) {
if (data === { name: 'LIMING' }) {
console.log("one");
復制代碼
} else if (data == { name: 'LIMING' }) {
console.log(two");
復制代碼
} else {
console.log("three");
復制代碼
}
}
checkName({ name: 'LIMING' }); ` so,問題來了,問上面js代碼運行以后輸出什么?
機智的你想到了沒?
one?two?three?
知道答案前要知道我們先思考下這道題考察的是什么知識點,工欲善其事必先利其器,自然就脫口而出了、
很明顯題目是在考面試人員如何判斷JS對象相等或者判斷對象相等的方法。
在比較相等性,原始類型通過它們的值進行比較,而對象通過它們的引用進行比較。JavaScript檢查對象是否具有對內存中相同位置的引用。
所以推薦使用遞歸的方法:
先判斷倆者是不是對象;
是對象后倆者長度是否一致;
判斷倆個對象的所有key值是否相等相同;
判斷倆個對象的相應的key對應的值是否相同;
來一個遞歸判斷里面的對象循環1-4步驟 ` function diff(obj1,obj2){
var o1 = obj1 instanceof Object;var o2 = obj2 instanceof Object;// 判斷是不是對象if (!o1 || !o2) {return obj1 === obj2;}//Object.keys() 返回一個由對象的自身可枚舉屬性(key值)組成的數組,//例如:數組返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;if (Object.keys(obj1).length !== Object.keys(obj2).length) {return false;}for (var o in obj1) {var t1 = obj1[o] instanceof Object;var t2 = obj2[o] instanceof Object;if (t1 && t2) {return diff(obj1[o], obj2[o]);} else if (obj1[o] !== obj2[o]) {return false;}}return true;
}
復制代碼
`