Node.js util.inspect() 方法
“util”模块提供了用于调试目的的“utility”函数。为了访问这些函数,我们需要通过 'require('util')' 调用它们。
util.inspect()(在 v0.3.0 中添加)方法是 util 模块的内置应用程序编程接口,用于调试并返回对象的字符串表示形式。 util.inspect() 方法不依赖于编程。它返回的输出可能随时更改以更改可以传递的结果补充选项(如 showHidden、depth)。对于检查的值,它使用构造函数名称或@@toStringTag来制作可识别的标签。
句法:
const util = require('util');
util.inspect(object[, options])
参数:该函数接受上面提到的两个参数,如下所述:
object
:任何 Class、 函数、Object 或 JavaScript 原语。 options :选项是“对象”类型,接受 JSON 格式的数据。
- showHidden
:默认情况下,对象的值设置为“False”,如果设置为“true”,则它开始显示隐藏的不可枚举符号和属性以及用户定义的原型、WeakMap 和 WeakSet 条目格式化的结果。 - depth
:默认情况下,对象的值设置为“2”。它指定递归的次数,以及在检查大对象和调用堆栈大小时传递Infinity或null以递归到最大值。 - colors
:默认情况下,对象的值设置为“False”,如果设置为“true”,则输出使用 ANSI 颜色代码获取彩色样式。 - customInspect
:默认情况下,对象的值设置为“true”,如果设置为“false”,则不调用 [[util.inspect.custom](depth, opts)] 函数。 - showProxy
:默认情况下,对象的值设置为“False”,如果设置为“true”,则代理检查包括目标和处理程序对象。 - maxArrayLength
:默认情况下,对象的值设置为“100”。虽然指定了格式化最大长度,即格式化结果中需要包含多少个Arrays、WeakMaps和WeakSets。要显示 (0) 无元素,请将值设置为 0 或负数;要显示所有元素,请将值设置为 Infinity 或 null。 - maxStringLength
:默认情况下,对象的值设置为“Infinity”。格式化时指定了字符的最大长度,即包含在格式化结果中的字符长度。要显示 (”) 无字符,请将值设置为 0 或负数,要显示所有元素,请将值设置为 Infinity 或 null。 - breakLength
:默认情况下,对象的值设置为“80”。在格式化时,它指定输入值被分成多行的最大长度。要将输入格式化为一行,请将其设置为 Infinity。 - 排序<布尔> | < 函数> :默认情况下,对象的值设置为'false',如果设置为'true'或者传递了一个函数,所有的属性都以格式化字符串排序。如果设置为 'true' 则使用默认排序,如果设置为函数。
- getters <布尔值> | < 字符串> :默认情况下,对象的值设置为“false”,如果设置为“true”,则将检查 getter。如果它设置为“get”,那么只有 getter 会被检查。如果它被设置为'set',那么只有具有相应设置器的 getter 将被检查。这种副作用的风险很高,具体取决于 getter函数。
- showHidden
返回值: < 字符串> :返回代表对象的格式化字符串。
示例 1:文件名:index.js
// Node.js syntax to demonstrate
// the util.inspect() method
// Importing util library
const util = require('util');
// Object
const nestedObject = {};
nestedObject.a = [nestedObject];
nestedObject.b = [['a', ['b']], 'b', 'c', 'd'];
nestedObject.b = {};
nestedObject.b.inner = nestedObject.b;
nestedObject.b.obj = nestedObject;
// Inspect by basic method
console.log("1.>", util.inspect(nestedObject));
// Random class
class geeksForGeeks { }
// Inspecting geeksForGeeks class
console.log("2.>", util.inspect(new geeksForGeeks()));
// Inspect by passing options to method
console.log("3.>", util.inspect(
nestedObject, true, 0, false));
// Inspect by calling option name
console.log("4.>", util.inspect(nestedObject,
showHidden = false, depth = 0, colorize = true));
// Inspect by passing in JSON format
console.log("5.>", util.inspect(nestedObject,
{ showHidden: false, depth: 0, colorize: true }));
// Inspect by directly calling inspect from 'util'
const { inspect } = require('util');
// Directly calling inspect method
// with single property
console.log("6.>", inspect(nestedObject),
{ colorize: true });
// Directly passing the JSON data
console.log("7.>", util.inspect([
{ name: "Amit", city: "Ayodhya" },
{ name: "Satyam", city: "Lucknow" },
{ name: "Sahai", city: "Lucknow" }],
false, 3, true));
// Directly calling inspect method with single property
console.log("8.>", inspect(nestedObject), { depth: 0 });
使用以下命令运行index.js文件:
node index.js
输出:
1.> {
a: [ [Circular *1] ],
b: { inner: [Circular *2], obj: [Circular *1] }
}
2.> geeksForGeeks {}
3.> { a: [Array], b: [Object] }
4.> { a: [Array], b: [Object] }
5.> { a: [Array], b: [Object] }
6.> {
a: [ [Circular *1] ],
b: { inner: [Circular *2], obj: [Circular *1] }
} { colorize: true }
7.> [
{ name: 'Amit', city: 'Ayodhya' },
{ name: 'Satyam', city: 'Lucknow' },
{ name: 'Sahai', city: 'Lucknow' }
]
8.> {
a: [ [Circular *1] ],
b: { inner: [Circular *2], obj: [Circular *1] }
} { depth: 0 }
示例 2:文件名:index.js
// Node.js syntax to demonstrate the
// util.inspect() method
// Import the util module
const util = require('util');
const { inspect } = require('util');
// Importing http module
var http = require('http');
// Inspecting http module
console.log("1.>", util.inspect(http, {
showHidden: false,
depth: 0, showProxy: false
}));
// Inspecting console module
console.log("2.>", util.inspect(
console, showHidden = false,
depth = 0, showProxy = true));
// Creating array filled with default value 1
const inspectArray = Array(108).fill(1);
// Prints the truncated array
console.log("3.>", inspectArray);
util.inspect.defaultOptions.maxArrayLength = null;
// Prints the full array
console.log("4.>", inspectArray);
const object = {
amit: [1, 2, [[
'alfa_romeo, spp___, sahai_harshit ' +
'Annapurna, chai paratha.',
'chota',
'bong']], 55],
vikas: new Map([
['alfa', 1], ['romeo', 'data']])
};
// Returns the compact view output.
console.log("5.>", util.inspect(object, {
compact: true, depth: 5,
breakLength: 80
}));
// Returns the output more reader friendly.
console.log("6.>", util.inspect(object, {
compact: false, depth: 5,
breakLength: 80
}));
const object1 = { alfa: 10 };
const object2 = { beta: 20 };
// Creating weakSet
const inspectingWeakset =
new WeakSet([object1, object2]);
console.log("7.>", inspect(
inspectingWeakset, { showHidden: true }));
// Output { { alfa: 10 }, { beta: 20 } }
object2[util.inspect.custom] = (depth) => {
return { alfaa: 'romeo' };
};
console.log("8.>", util.inspect(object2));
// Prints: "{ alfaa: 'romeo' }"
使用以下命令运行index.js文件:
node index.js
输出:
1.> { _connectionListener: [Function: connectionListener], …. globalAgent: [Getter/Setter]}
2.> { log: [Function: bound consoleCall], …..[Symbol(kFormatForStderr)]: [Function: bound ]}
3.> [ 1, 1, 1, 1, 1, 1, ………1, 1, 1, 1, 1, … 8 more items]
4.> [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ….1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
5.> { amit: [ 1, 2, [ [ ‘alfa_romeo, spp___, sahai_harshit Annapurna, chai paratha.’,
‘chota’, ‘bong’ ] ], 55 ], vikas: Map(2) { ‘alfa’ => 1, ‘romeo’ => ‘data’ } }
6.> returns the output more reader friendly.
7.> WeakSet { { alfa: 10 }, { beta: 20 } }
8.> { alfaa: ‘romeo’ }
util.format(format[, …]) 方法也 使用第一个参数作为类似 printf 的格式,与格式化字符串一起给出相同的结果。
参考: https://nodejs.org/api/util.html#util_util_inspect_object_options