Skip to content

Commit 82830a8

Browse files
BridgeARtargos
authored andcommitted
assert: fix loose assert with map and set
There was an oversight when checking the possible loose comparisons. This is now fixed by also accepting `''` instead of `0` or `false`. PR-URL: #22145 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Trivikram Kamat <[email protected]>
1 parent bc6905b commit 82830a8

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

lib/internal/util/comparisons.js

+21-12
Original file line numberDiff line numberDiff line change
@@ -354,29 +354,38 @@ function setEquiv(a, b, strict, memo) {
354354
return true;
355355
}
356356

357+
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using
357358
function findLooseMatchingPrimitives(prim) {
358-
var values, number;
359359
switch (typeof prim) {
360360
case 'number':
361-
values = ['' + prim];
362-
if (prim === 1 || prim === 0)
363-
values.push(Boolean(prim));
364-
return values;
361+
if (prim === 0) {
362+
return ['', '0', false];
363+
}
364+
if (prim === 1) {
365+
return ['1', true];
366+
}
367+
return ['' + prim];
365368
case 'string':
366-
number = +prim;
369+
if (prim === '' || prim === '0') {
370+
return [0, false];
371+
}
372+
if (prim === '1') {
373+
return [1, true];
374+
}
375+
const number = +prim;
367376
if ('' + number === prim) {
368-
values = [number];
369-
if (number === 1 || number === 0)
370-
values.push(Boolean(number));
377+
return [number];
371378
}
372-
return values;
379+
return;
373380
case 'undefined':
374381
return [null];
375382
case 'object': // Only pass in null as object!
376383
return [undefined];
377384
case 'boolean':
378-
number = +prim;
379-
return [number, '' + number];
385+
if (prim === false) {
386+
return ['', '0', 0];
387+
}
388+
return ['1', 1];
380389
}
381390
}
382391

test/parallel/test-assert-deep.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,8 @@ assertDeepAndStrictEqual(
350350
new Map([[1, undefined]])
351351
);
352352
assertOnlyDeepEqual(
353-
new Map([[1, null]]),
354-
new Map([['1', undefined]])
353+
new Map([[1, null], ['', '0']]),
354+
new Map([['1', undefined], [false, 0]])
355355
);
356356
assertNotDeepOrStrict(
357357
new Map([[1, undefined]]),
@@ -368,8 +368,12 @@ assertOnlyDeepEqual(
368368
new Map([[undefined, null]])
369369
);
370370
assertOnlyDeepEqual(
371-
new Set([null]),
372-
new Set([undefined])
371+
new Set([null, '']),
372+
new Set([undefined, 0])
373+
);
374+
assertNotDeepOrStrict(
375+
new Set(['']),
376+
new Set(['0'])
373377
);
374378

375379
// GH-6416. Make sure circular refs don't throw.

0 commit comments

Comments
 (0)