diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index c611eb97fc0755..793317e6f9d6f5 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2189,11 +2189,12 @@ function addNumericSeparatorEnd(integerString) { const remainingText = (remaining) => `... ${remaining} more item${remaining > 1 ? 's' : ''}`; function formatNumber(fn, number, numericSeparator) { + // Format -0 as '-0'. Checking `number === -0` won't distinguish 0 from -0. + // String(-0) === '0', so this must be checked before any String() conversion. + if (ObjectIs(number, -0)) { + return fn('-0', 'number'); + } if (!numericSeparator) { - // Format -0 as '-0'. Checking `number === -0` won't distinguish 0 from -0. - if (ObjectIs(number, -0)) { - return fn('-0', 'number'); - } return fn(`${number}`, 'number'); } diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index e60320d0591233..0fb9fdac5e6365 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -3793,6 +3793,7 @@ assert.strictEqual( assert.strictEqual(util.inspect(NaN), 'NaN'); assert.strictEqual(util.inspect(Infinity), 'Infinity'); assert.strictEqual(util.inspect(-Infinity), '-Infinity'); + assert.strictEqual(util.inspect(-0), '-0'); assert.strictEqual( util.inspect(new Float64Array([100_000_000])), @@ -3824,6 +3825,9 @@ assert.strictEqual( '-123_456_789.123_456_78' ); + // -0 should be formatted as '-0' even with numericSeparator enabled + assert.strictEqual(util.inspect(-0, { numericSeparator: true }), '-0'); + // Regression test for https://github.com/nodejs/node/issues/59376 // numericSeparator should work correctly for negative fractional numbers {