📜  Node.js util.inspect() 方法

📅  最后修改于: 2022-05-13 01:56:21.772000             🧑  作者: Mango

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”。它指定递归的次数,以及在检查大对象和调用堆栈大小时传递Infinitynull以递归到最大值。
    • 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函数。

    返回值: < 字符串> 返回代表对象的格式化字符串。

    示例 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
    

    输出:

    util.format(format[, …])  方法也 使用第一个参数作为类似 printf 的格式,与格式化字符串一起给出相同的结果。

    参考: https://nodejs.org/api/util.html#util_util_inspect_object_options