當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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]]])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。