diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index 8ffa3032683649..22dec67330cd31 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -1078,7 +1078,7 @@ function formatPrimitive(fn, value, ctx) { if (typeof value === 'undefined') return fn('undefined', 'undefined'); // es6 symbol primitive - return fn(value.toString(), 'symbol'); + return fn(SymbolPrototype.toString(value), 'symbol'); } function formatNamespaceObject(ctx, value, recurseTimes, keys) { @@ -1484,9 +1484,8 @@ function reduceToSingleString( return `${braces[0]}${ln}${join(output, `,\n${indentation} `)} ${braces[1]}`; } -const emptyOptions = {}; function format(...args) { - return formatWithOptions(emptyOptions, ...args); + return formatWithOptions(undefined, ...args); } @@ -1532,16 +1531,14 @@ function formatWithOptions(inspectOptions, ...args) { switch (nextChar) { case 115: // 's' const tempArg = args[++a]; - if (typeof tempArg === 'object' && tempArg !== null) { + if (typeof tempArg !== 'string' && + typeof tempArg !== 'function') { tempStr = inspect(tempArg, { ...inspectOptions, compact: 3, colors: false, depth: 0 }); - // eslint-disable-next-line valid-typeof - } else if (typeof tempArg === 'bigint') { - tempStr = `${tempArg}n`; } else { tempStr = String(tempArg); } @@ -1557,7 +1554,7 @@ function formatWithOptions(inspectOptions, ...args) { } else if (typeof tempNum === 'symbol') { tempStr = 'NaN'; } else { - tempStr = `${Number(tempNum)}`; + tempStr = formatNumber(stylizeNoColor, Number(tempNum)); } break; case 79: // 'O' @@ -1581,7 +1578,7 @@ function formatWithOptions(inspectOptions, ...args) { } else if (typeof tempInteger === 'symbol') { tempStr = 'NaN'; } else { - tempStr = `${parseInt(tempInteger)}`; + tempStr = formatNumber(stylizeNoColor, parseInt(tempInteger)); } break; case 102: // 'f' @@ -1589,7 +1586,7 @@ function formatWithOptions(inspectOptions, ...args) { if (typeof tempFloat === 'symbol') { tempStr = 'NaN'; } else { - tempStr = `${parseFloat(tempFloat)}`; + tempStr = formatNumber(stylizeNoColor, parseFloat(tempFloat)); } break; case 37: // '%' diff --git a/test/parallel/test-util-format.js b/test/parallel/test-util-format.js index 0869d53f22a82a..fa0f66ecfc3fa1 100644 --- a/test/parallel/test-util-format.js +++ b/test/parallel/test-util-format.js @@ -53,7 +53,9 @@ assert.strictEqual(util.format('%d', '42'), '42'); assert.strictEqual(util.format('%d', '42.0'), '42'); assert.strictEqual(util.format('%d', 1.5), '1.5'); assert.strictEqual(util.format('%d', -0.5), '-0.5'); +assert.strictEqual(util.format('%d', -0.0), '-0'); assert.strictEqual(util.format('%d', ''), '0'); +assert.strictEqual(util.format('%d', ' -0.000'), '-0'); assert.strictEqual(util.format('%d', Symbol()), 'NaN'); assert.strictEqual(util.format('%d %d', 42, 43), '42 43'); assert.strictEqual(util.format('%d %d', 42), '42 %d'); @@ -77,7 +79,7 @@ assert.strictEqual(util.format('%i', 42), '42'); assert.strictEqual(util.format('%i', '42'), '42'); assert.strictEqual(util.format('%i', '42.0'), '42'); assert.strictEqual(util.format('%i', 1.5), '1'); -assert.strictEqual(util.format('%i', -0.5), '0'); +assert.strictEqual(util.format('%i', -0.5), '-0'); assert.strictEqual(util.format('%i', ''), 'NaN'); assert.strictEqual(util.format('%i', Symbol()), 'NaN'); assert.strictEqual(util.format('%i %i', 42, 43), '42 43'); @@ -110,6 +112,7 @@ assert.strictEqual(util.format('%f'), '%f'); assert.strictEqual(util.format('%f', 42.0), '42'); assert.strictEqual(util.format('%f', 42), '42'); assert.strictEqual(util.format('%f', '42'), '42'); +assert.strictEqual(util.format('%f', '-0.0'), '-0'); assert.strictEqual(util.format('%f', '42.0'), '42'); assert.strictEqual(util.format('%f', 1.5), '1.5'); assert.strictEqual(util.format('%f', -0.5), '-0.5'); @@ -127,6 +130,8 @@ assert.strictEqual(util.format('%s', null), 'null'); assert.strictEqual(util.format('%s', 'foo'), 'foo'); assert.strictEqual(util.format('%s', 42), '42'); assert.strictEqual(util.format('%s', '42'), '42'); +assert.strictEqual(util.format('%s', -0), '-0'); +assert.strictEqual(util.format('%s', '-0.0'), '-0.0'); assert.strictEqual(util.format('%s %s', 42, 43), '42 43'); assert.strictEqual(util.format('%s %s', 42), '42 %s'); assert.strictEqual(util.format('%s', 42n), '42n');