Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9782639

Browse filesBrowse files
ishon19marco-ippolito
authored andcommitted
doc: WeakSet and WeakMap comparison details
PR-URL: #56648 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 4c24ef8 commit 9782639
Copy full SHA for 9782639

File tree

Expand file treeCollapse file tree

1 file changed

+60
-24
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+60
-24
lines changed

‎doc/api/assert.md

Copy file name to clipboardExpand all lines: doc/api/assert.md
+60-24Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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
// }
878880

879881
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 = {};
883884

885+
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
886899

887-
// 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
```
898917

899918
```cjs
@@ -969,23 +988,40 @@ assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
969988
// }
970989

971990
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 = {};
975993

994+
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
9781008

979-
// 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
```
9901026

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

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.