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: https://github.com/nodejs/node/pull/22145 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
This commit is contained in:
parent
1d859ef532
commit
85bfd71312
@ -354,29 +354,38 @@ function setEquiv(a, b, strict, memo) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using
|
||||||
function findLooseMatchingPrimitives(prim) {
|
function findLooseMatchingPrimitives(prim) {
|
||||||
var values, number;
|
|
||||||
switch (typeof prim) {
|
switch (typeof prim) {
|
||||||
case 'number':
|
case 'number':
|
||||||
values = ['' + prim];
|
if (prim === 0) {
|
||||||
if (prim === 1 || prim === 0)
|
return ['', '0', false];
|
||||||
values.push(Boolean(prim));
|
|
||||||
return values;
|
|
||||||
case 'string':
|
|
||||||
number = +prim;
|
|
||||||
if ('' + number === prim) {
|
|
||||||
values = [number];
|
|
||||||
if (number === 1 || number === 0)
|
|
||||||
values.push(Boolean(number));
|
|
||||||
}
|
}
|
||||||
return values;
|
if (prim === 1) {
|
||||||
|
return ['1', true];
|
||||||
|
}
|
||||||
|
return ['' + prim];
|
||||||
|
case 'string':
|
||||||
|
if (prim === '' || prim === '0') {
|
||||||
|
return [0, false];
|
||||||
|
}
|
||||||
|
if (prim === '1') {
|
||||||
|
return [1, true];
|
||||||
|
}
|
||||||
|
const number = +prim;
|
||||||
|
if ('' + number === prim) {
|
||||||
|
return [number];
|
||||||
|
}
|
||||||
|
return;
|
||||||
case 'undefined':
|
case 'undefined':
|
||||||
return [null];
|
return [null];
|
||||||
case 'object': // Only pass in null as object!
|
case 'object': // Only pass in null as object!
|
||||||
return [undefined];
|
return [undefined];
|
||||||
case 'boolean':
|
case 'boolean':
|
||||||
number = +prim;
|
if (prim === false) {
|
||||||
return [number, '' + number];
|
return ['', '0', 0];
|
||||||
|
}
|
||||||
|
return ['1', 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,8 +355,8 @@ assertDeepAndStrictEqual(
|
|||||||
new Map([[1, undefined]])
|
new Map([[1, undefined]])
|
||||||
);
|
);
|
||||||
assertOnlyDeepEqual(
|
assertOnlyDeepEqual(
|
||||||
new Map([[1, null]]),
|
new Map([[1, null], ['', '0']]),
|
||||||
new Map([['1', undefined]])
|
new Map([['1', undefined], [false, 0]])
|
||||||
);
|
);
|
||||||
assertNotDeepOrStrict(
|
assertNotDeepOrStrict(
|
||||||
new Map([[1, undefined]]),
|
new Map([[1, undefined]]),
|
||||||
@ -373,8 +373,12 @@ assertOnlyDeepEqual(
|
|||||||
new Map([[undefined, null]])
|
new Map([[undefined, null]])
|
||||||
);
|
);
|
||||||
assertOnlyDeepEqual(
|
assertOnlyDeepEqual(
|
||||||
new Set([null]),
|
new Set([null, '']),
|
||||||
new Set([undefined])
|
new Set([undefined, 0])
|
||||||
|
);
|
||||||
|
assertNotDeepOrStrict(
|
||||||
|
new Set(['']),
|
||||||
|
new Set(['0'])
|
||||||
);
|
);
|
||||||
|
|
||||||
// GH-6416. Make sure circular refs don't throw.
|
// GH-6416. Make sure circular refs don't throw.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user