判斷兩個物件相等 網易一面

2021-08-25 19:28:46 字數 1651 閱讀 6140

思路:首先明白,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認為兩個物件相等...