diff --git a/lib/util.js b/lib/util.js index 7b2bfd2b3c0d56..401a0ed3c7f7d5 100644 --- a/lib/util.js +++ b/lib/util.js @@ -292,7 +292,10 @@ function formatValue(ctx, value, recurseTimes) { var base = '', empty = false, braces, formatter; if (Array.isArray(value)) { - if (constructor === Array) + // We can't use `constructor === Array` because this could + // have come from a Debug context. + // Otherwise, an Array will print "Array [...]". + if (constructor && constructor.name === 'Array') constructor = null; braces = ['[', ']']; empty = value.length === 0; diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 58a4c8a2f2b142..aa6c7644913ad7 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -23,6 +23,19 @@ assert.equal(util.inspect(a), '[ \'foo\', , \'baz\' ]'); assert.equal(util.inspect(a, true), '[ \'foo\', , \'baz\', [length]: 3 ]'); assert.equal(util.inspect(new Array(5)), '[ , , , , ]'); +// test for Array constructor in different context +const Debug = require('vm').runInDebugContext('Debug'); +var map = new Map(); +map.set(1, 2); +var mirror = Debug.MakeMirror(map.entries(), true); +var vals = mirror.preview(); +var valsOutput = []; +for (let o of vals) { + valsOutput.push(o); +} + +assert.strictEqual(util.inspect(valsOutput), '[ [ 1, 2 ] ]'); + // test for property descriptors var getter = Object.create(null, { a: {