diff --git a/lib/util.js b/lib/util.js index 37008b2d176062..d6a3c6dbc67b2e 100644 --- a/lib/util.js +++ b/lib/util.js @@ -371,10 +371,13 @@ function formatValue(ctx, value, recurseTimes) { // Look up the keys of the object. var keys = Object.keys(value); var visibleKeys = arrayToHash(keys); + const symbolKeys = Object.getOwnPropertySymbols(value); + const enumSymbolKeys = symbolKeys + .filter((key) => value.propertyIsEnumerable(key)); + keys = keys.concat(enumSymbolKeys); if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - keys = keys.concat(Object.getOwnPropertySymbols(value)); + keys = Object.getOwnPropertyNames(value).concat(symbolKeys); } // This could be a boxed primitive (new String(), etc.), check valueOf() diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 7fd682954207d3..e86a10c43f63db 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -588,8 +588,9 @@ assert.doesNotThrow(function() { '{ a: 123, inspect: [Function: inspect] }'); const subject = { a: 123, [util.inspect.custom]() { return this; } }; + const UIC = 'util.inspect.custom'; assert.strictEqual(util.inspect(subject), - '{ a: 123 }'); + `{ a: 123,\n [Symbol(${UIC})]: [Function: [${UIC}]] }`); } // util.inspect with "colors" option should produce as many lines as without it @@ -659,18 +660,27 @@ if (typeof Symbol !== 'undefined') { subject[Symbol('symbol')] = 42; - assert.strictEqual(util.inspect(subject), '{}'); + assert.strictEqual(util.inspect(subject), '{ [Symbol(symbol)]: 42 }'); assert.strictEqual( util.inspect(subject, options), '{ [Symbol(symbol)]: 42 }' ); + Object.defineProperty( + subject, + Symbol(), + {enumerable: false, value: 'non-enum'}); + assert.strictEqual(util.inspect(subject), '{ [Symbol(symbol)]: 42 }'); + assert.strictEqual( + util.inspect(subject, options), + '{ [Symbol(symbol)]: 42, [Symbol()]: \'non-enum\' }' + ); + subject = [1, 2, 3]; subject[Symbol('symbol')] = 42; - assert.strictEqual(util.inspect(subject), '[ 1, 2, 3 ]'); - assert.strictEqual(util.inspect(subject, options), - '[ 1, 2, 3, [length]: 3, [Symbol(symbol)]: 42 ]'); + assert.strictEqual(util.inspect(subject), + '[ 1, 2, 3, [Symbol(symbol)]: 42 ]'); } // test Set