思路:首先明白,js的物件型別很多,針對每個型別判斷相等的方法都不同。
物件型別:string、boolean、number、array、date、建構函式......
我們認為:
nan 和 nan 是相等
[1] 和 [1] 是相等
和 是相等
不僅僅是這些長得一樣的,還有
1 和 new number(1) 是相等
'curly' 和 new string('curly') 是相等
true 和 new boolean(true) 是相等
判斷字串和字串包裝物件是相等——隱式轉換
如:
console.log('curly' + '' === new string('curly') + ''); // true
思路:如果 a 和 b 的 object.prototype.tostring的結果一致,並且都是"[object string]",那我們就使用 '' + a === '' + b 進行判斷。
可是不止有 string 物件吶,boolean、number、regexp、date呢?
var tostring = object.prototype.tostring;
function isfunction(obj)
function eq(a, b, astack, bstack) ;
function deepeq(a, b, astack, bstack)
var arearrays = classname === '[object array]';
// 不是陣列
if (!arearrays)
}astack = astack || ;
bstack = bstack || ;
var length = astack.length;
// 檢查是否有迴圈引用的部分
while (length--)
}astack.push(a);
bstack.push(b);
// 陣列判斷
if (arearrays)
}// 物件判斷
else
}astack.pop();
bstack.pop();
return true;
}console.log(eq(0, 0)) // true
console.log(eq(0, -0)) // false
console.log(eq(nan, nan)); // true
console.log(eq(number(nan), number(nan))); // true
console.log(eq('curly', new string('curly'))); // true
console.log(eq([1], [1])); // true
console.log(eq(, )); // true
var a, b;
a = } } } };
b = } } } };
a.foo.b.foo.c.foo = a;
b.foo.b.foo.c.foo = b;
console.log(eq(a, b)) // true
js怎麼判斷兩個物件相等?
es6 中有乙個方法判斷兩個物件是否相等,這個方法判斷是兩個物件引用位址是否一致 let obj1 let obj2 console.log object.is obj1,obj2 false let obj3 obj1 console.log object.is obj1,obj3 true co...
C 判斷兩個物件是否相等
首先在c 中判斷物件相等,是對於引用型別的,兩個 物件用 只是判斷他們的記憶體位址是否一樣 對於字串或者數值,判斷相等只需要用 運算 引用型別 1.對乙個類只是例項化一次 向那些只有賦值沒有new例項化乙個物件的話,拿這些物件指的都是乙個位址 people p1 newpeople people p...
List Set Map判斷兩個物件相等的標準
list 通過equals 方法比較返回true即可。hashset 先比較兩個物件hashcode 方法返回的值是否相等,如果不相等就認為兩個物件是不相等的,如果兩個物件的hashcode相等就繼續呼叫equals 方法進一步判斷兩個物件是否相等,如果equals 方法返回true認為兩個物件相等...