diff --git a/benchmark/assert/deepequal-prims-and-objs-big-loop.js b/benchmark/assert/deepequal-prims-and-objs-big-loop.js index bc2b84ebf20..78622d96d83 100644 --- a/benchmark/assert/deepequal-prims-and-objs-big-loop.js +++ b/benchmark/assert/deepequal-prims-and-objs-big-loop.js @@ -22,6 +22,7 @@ const primValues = { 'empty_object': {}, 'regexp': /abc/i, 'date': new Date(), + 'invalidDate': new Date('foo'), }; const primValues2 = { @@ -34,6 +35,7 @@ const primValues2 = { 'empty_object': {}, 'regexp': /abc/i, 'date': new Date(primValues.date), + 'invalidDate': new Date('foo'), }; const primValuesUnequal = { @@ -49,6 +51,7 @@ const primValuesUnequal = { 'empty_object': [], 'regexp': /abc/g, 'date': new Date(primValues.date.getTime() + 1), + 'invalidDate': new Date(), }; const bench = common.createBenchmark(main, { diff --git a/doc/api/assert.md b/doc/api/assert.md index 64ba28687e8..b1be3a219b5 100644 --- a/doc/api/assert.md +++ b/doc/api/assert.md @@ -231,6 +231,9 @@ An alias of [`assert.ok()`][]. * `actual` {any} diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index 178c6aceeff..6d36ffe1743 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -299,10 +299,15 @@ function objectComparisonStart(val1, val2, mode, memos) { } else if (val1Tag === '[object Object]') { return keyCheck(val1, val2, mode, memos, kNoIterator); } else if (isDate(val1)) { - if (!isDate(val2) || - DatePrototypeGetTime(val1) !== DatePrototypeGetTime(val2)) { + if (!isDate(val2)) { return false; } + const time1 = DatePrototypeGetTime(val1); + const time2 = DatePrototypeGetTime(val2); + if (time1 !== time2) { + // eslint-disable-next-line no-self-compare + return time1 !== time1 && time2 !== time2; + } } else if (isRegExp(val1)) { if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) { return false; diff --git a/test/parallel/test-assert-deep.js b/test/parallel/test-assert-deep.js index 5061365320a..940aeeaecdd 100644 --- a/test/parallel/test-assert-deep.js +++ b/test/parallel/test-assert-deep.js @@ -752,6 +752,8 @@ test('Additional tests', () => { assertNotDeepOrStrict(new Date(), new Date(2000, 3, 14)); + assertDeepAndStrictEqual(new Date('foo'), new Date('bar')); + assertDeepAndStrictEqual(/a/, /a/); assertDeepAndStrictEqual(/a/g, /a/g); assertDeepAndStrictEqual(/a/i, /a/i);