当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js util.inspect(object[, showHidden[, depth[, colors]]])用法及代码示例


util.inspect(object[, showHidden[, depth[, colors]]])

历史
版本变化
v17.3.0、v16.14.0

现在支持numericSeparator 选项。

v13.0.0

循环参考现在包括参考的标记。

v14.6.0、v12.19.0

如果 object 现在来自不同的 vm.Context,则其上的自定义检查函数将不再接收 context-specific 参数。

v13.13.0、v12.17.0

现在支持maxStringLength 选项。

v13.5.0、v12.16.0

如果 showHiddentrue ,则会检查用户定义的原型属性。

v12.0.0

compact 选项默认更改为 3 并且 breakLength 选项默认更改为 80

v12.0.0

内部属性不再出现在自定义检查函数的上下文参数中。

v11.11.0

compact 选项接受用于新输出模式的数字。

v11.7.0

ArrayBuffers 现在也显示它们的二进制内容。

v11.5.0

现在支持getters 选项。

v11.4.0

depth 默认更改回 2

v11.0.0

depth 默认更改为 20

v11.0.0

检查输出现在限制在大约 128 MiB。超过该大小的数据将不会被全面检查。

v10.12.0

现在支持sorted 选项。

v10.6.0

检查链表和类似对象现在可以达到最大调用堆栈大小。

v10.0.0

现在也可以检查 WeakMapWeakSet 条目。

v9.9.0

现在支持compact 选项。

v6.6.0

自定义检查函数现在可以返回 this

v6.3.0

现在支持breakLength 选项。

v6.1.0

现在支持maxArrayLength 选项;特别是,长数组在默认情况下会被截断。

v6.1.0

现在支持showProxy 选项。

v0.3.0

添加于:v0.3.0


参数
  • object <any> 任何 JavaScript 原语或 Object
  • options <Object>
    • showHidden <boolean> 如果 true , object 的不可枚举符号和属性包含在格式化结果中。 WeakMap WeakSet 条目以及用户定义的原型属性(不包括方法属性)也包括在内。 默认: false
    • depth <number> 指定格式化 object 时递归的次数。这对于检查大型物体很有用。要递归到最大调用堆栈大小,请传递 Infinitynull默认: 2
    • colors <boolean>如果true,输出的样式采用 ANSI 颜色代码。颜色是可定制的。看自定义 util.inspect 颜色.默认: false.
    • customInspect <boolean> 如果 false ,则不调用 [util.inspect.custom](depth, opts, inspect) 函数。 默认: true
    • showProxy <boolean>如果true,Proxy检查包括targethandler对象。默认: false.
    • maxArrayLength <integer> 指定格式化时要包含的 Array TypedArray WeakMap WeakSet 元素的最大数量。设置为 nullInfinity 以显示所有元素。设置为 0 或负数以不显示任何元素。 默认: 100
    • maxStringLength <integer> 指定格式化时要包含的最大字符数。设置为nullInfinity 以显示所有元素。设置为 0 或负数以不显示字符。 默认: 10000
    • breakLength <integer> 输入值被拆分为多行的长度。设置为 Infinity 以将输入格式化为单行(结合 compact 设置为 true 或任何数字 >= 1 )。 默认: 80
    • compact <boolean> | <integer> 将此设置为 false 会导致每个对象键显示在新行上。它将在比 breakLength 长的文本中换行。如果设置为一个数字,只要所有属性都适合 breakLength ,那么大多数 n 内部元素都会合并在一行上。短数组元素也被组合在一起。有关详细信息,请参阅下面的示例。 默认: 3
    • sorted <boolean> | <Function> 如果设置为 true 或函数,则对象的所有属性以及 SetMap 条目都将在结果字符串中排序。如果设置为true,则使用default sort。如果设置为函数,则将其用作 compare function
    • getters <boolean> | <string> 如果设置为 true ,则检查吸气剂。如果设置为 'get' ,则仅检查没有相应 setter 的 getter。如果设置为 'set' ,则仅检查具有相应设置器的 getter。根据 getter 函数,这可能会导致副作用。 默认: false
    • numericSeparator <boolean> 如果设置为 true ,则使用下划线分隔所有 bigint 和数字中的每三位。 默认: false
  • 返回: <string> object 的表示。

util.inspect() 方法返回用于调试的object 的字符串表示形式。 util.inspect 的输出可能随时更改,不应以编程方式依赖。可能会传递额外的options 来改变结果。 util.inspect() 将使用构造函数的名称和/或 @@toStringTag 为检查的值制作可识别的标签。

class Foo {
  get [Symbol.toStringTag]() {
    return 'bar';
  }
}

class Bar {}

const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } });

util.inspect(new Foo()); // 'Foo [bar] {}'
util.inspect(new Bar()); // 'Bar {}'
util.inspect(baz);       // '[foo] {}'

循环引用通过使用引用索引指向它们的锚点:

const { inspect } = require('node:util');

const obj = {};
obj.a = [obj];
obj.b = {};
obj.b.inner = obj.b;
obj.b.obj = obj;

console.log(inspect(obj));
// <ref *1> {
//   a: [ [Circular *1] ],
//   b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }

以下示例检查 util 对象的所有属性:

const util = require('node:util');

console.log(util.inspect(util, { showHidden: true, depth: null }));

以下示例突出显示了 compact 选项的效果:

const util = require('node:util');

const o = {
  a: [1, 2, [[
    'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
      'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
    'test',
    'foo']], 4],
  b: new Map([['za', 1], ['zb', 'test']])
};
console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }));

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// Setting `compact` to false or an integer creates more reader friendly output.
console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }));

// {
//   a: [
//     1,
//     2,
//     [
//       [
//         'Lorem ipsum dolor sit amet,\n' +
//           'consectetur adipiscing elit, sed do eiusmod \n' +
//           'tempor incididunt ut labore et dolore magna aliqua.',
//         'test',
//         'foo'
//       ]
//     ],
//     4
//   ],
//   b: Map(2) {
//     'za' => 1,
//     'zb' => 'test'
//   }
// }

// Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a
// single line.

showHidden 选项允许检查 WeakMap WeakSet 条目。如果条目多于 maxArrayLength ,则无法保证显示哪些条目。这意味着两次检索相同的 WeakSet 条目可能会导致不同的输出。此外,没有剩余强引用的条目可能随时被垃圾收集。

const { inspect } = require('node:util');

const obj = { a: 1 };
const obj2 = { b: 2 };
const weakSet = new WeakSet([obj, obj2]);

console.log(inspect(weakSet, { showHidden: true }));
// WeakSet { { a: 1 }, { b: 2 } }

sorted 选项确保对象的属性插入顺序不会影响 util.inspect() 的结果。

const { inspect } = require('node:util');
const assert = require('node:assert');

const o1 = {
  b: [2, 3, 1],
  a: '`a` comes before `b`',
  c: new Set([2, 3, 1])
};
console.log(inspect(o1, { sorted: true }));
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }));
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }

const o2 = {
  c: new Set([2, 1, 3]),
  a: '`a` comes before `b`',
  b: [2, 3, 1]
};
assert.strict.equal(
  inspect(o1, { sorted: true }),
  inspect(o2, { sorted: true })
);

numericSeparator 选项为所有数字每三位添加一个下划线。

const { inspect } = require('node:util');

const thousand = 1_000;
const million = 1_000_000;
const bigNumber = 123_456_789n;
const bigDecimal = 1_234.123_45;

console.log(thousand, million, bigNumber, bigDecimal);
// 1_000 1_000_000 123_456_789n 1_234.123_45

util.inspect() 是一种用于调试的同步方法。其最大输出长度约为 128 MiB。导致较长输出的输入将被截断。

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 util.inspect(object[, showHidden[, depth[, colors]]])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。