◐ Shell
clean mode source ↗

doc: `WeakSet` and `WeakMap` comparison details · nodejs/node@9782639

@@ -799,8 +799,10 @@ are recursively evaluated also by the following rules.

799799

* [`Map`][] keys and [`Set`][] items are compared unordered.

800800

* Recursion stops when both sides differ or both sides encounter a circular

801801

reference.

802-

* [`WeakMap`][] and [`WeakSet`][] comparison does not rely on their values. See

803-

below for further details.

802+

* [`WeakMap`][] and [`WeakSet`][] instances are **not** compared structurally.

803+

They are only equal if they reference the same object. Any comparison between

804+

different `WeakMap` or `WeakSet` instances will result in inequality,

805+

even if they contain the same entries.

804806

* [`RegExp`][] lastIndex, flags, and source are always compared, even if these

805807

are not enumerable properties.

806808

@@ -877,23 +879,40 @@ assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });

877879

// }

878880879881

const weakMap1 = new WeakMap();

880-

const weakMap2 = new WeakMap([[{}, {}]]);

881-

const weakMap3 = new WeakMap();

882-

weakMap3.unequal = true;

882+

const weakMap2 = new WeakMap();

883+

const obj = {};

883884885+

weakMap1.set(obj, 'value');

886+

weakMap2.set(obj, 'value');

887+888+

// Comparing different instances fails, even with same contents

884889

assert.deepStrictEqual(weakMap1, weakMap2);

885-

// OK, because it is impossible to compare the entries

890+

// AssertionError: Values have same structure but are not reference-equal:

891+

//

892+

// WeakMap {

893+

// <items unknown>

894+

// }

895+896+

// Comparing the same instance to itself succeeds

897+

assert.deepStrictEqual(weakMap1, weakMap1);

898+

// OK

886899887-

// Fails because weakMap3 has a property that weakMap1 does not contain:

888-

assert.deepStrictEqual(weakMap1, weakMap3);

900+

const weakSet1 = new WeakSet();

901+

const weakSet2 = new WeakSet();

902+

weakSet1.add(obj);

903+

weakSet2.add(obj);

904+905+

// Comparing different instances fails, even with same contents

906+

assert.deepStrictEqual(weakSet1, weakSet2);

889907

// AssertionError: Expected inputs to be strictly deep-equal:

890908

// + actual - expected

891909

//

892-

// WeakMap {

893-

// + [items unknown]

894-

// - [items unknown],

895-

// - unequal: true

896-

// }

910+

// + WeakSet { <items unknown> }

911+

// - WeakSet { <items unknown> }

912+913+

// Comparing the same instance to itself succeeds

914+

assert.deepStrictEqual(weakSet1, weakSet1);

915+

// OK

897916

```

898917899918

```cjs

@@ -969,23 +988,40 @@ assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });

969988

// }

970989971990

const weakMap1 = new WeakMap();

972-

const weakMap2 = new WeakMap([[{}, {}]]);

973-

const weakMap3 = new WeakMap();

974-

weakMap3.unequal = true;

991+

const weakMap2 = new WeakMap();

992+

const obj = {};

975993994+

weakMap1.set(obj, 'value');

995+

weakMap2.set(obj, 'value');

996+997+

// Comparing different instances fails, even with same contents

976998

assert.deepStrictEqual(weakMap1, weakMap2);

977-

// OK, because it is impossible to compare the entries

999+

// AssertionError: Values have same structure but are not reference-equal:

1000+

//

1001+

// WeakMap {

1002+

// <items unknown>

1003+

// }

1004+1005+

// Comparing the same instance to itself succeeds

1006+

assert.deepStrictEqual(weakMap1, weakMap1);

1007+

// OK

9781008979-

// Fails because weakMap3 has a property that weakMap1 does not contain:

980-

assert.deepStrictEqual(weakMap1, weakMap3);

1009+

const weakSet1 = new WeakSet();

1010+

const weakSet2 = new WeakSet();

1011+

weakSet1.add(obj);

1012+

weakSet2.add(obj);

1013+1014+

// Comparing different instances fails, even with same contents

1015+

assert.deepStrictEqual(weakSet1, weakSet2);

9811016

// AssertionError: Expected inputs to be strictly deep-equal:

9821017

// + actual - expected

9831018

//

984-

// WeakMap {

985-

// + [items unknown]

986-

// - [items unknown],

987-

// - unequal: true

988-

// }

1019+

// + WeakSet { <items unknown> }

1020+

// - WeakSet { <items unknown> }

1021+1022+

// Comparing the same instance to itself succeeds

1023+

assert.deepStrictEqual(weakSet1, weakSet1);

1024+

// OK

9891025

```

99010269911027

If the values are not equal, an [`AssertionError`][] is thrown with a `message`