如何像console.log一样将任意类型的值序列化为字符串?(Deno优先)
在Deno中获取与console.log一致的对象格式化结果
直接使用Deno内置的Deno.inspect()方法
这是最直接的解决方案,因为Deno的console.log()本质上就是调用Deno.inspect()来序列化输出内容的,用它能得到和控制台完全一致的字符串结果,完美解决toString()和JSON.stringify()的局限性。
基础用法
// 处理Error对象 const error = new Error("示例错误信息"); const errorStr = Deno.inspect(error); console.log(errorStr); // 输出:Error: 示例错误信息\n at <anonymous>:1:15 // 处理常规对象 const user = { name: "Alice", age: 30, hobbies: ["reading", "coding"] }; const userStr = Deno.inspect(user); console.log(userStr); // 输出:{ name: "Alice", age: 30, hobbies: ["reading", "coding"] }
自定义配置选项
Deno.inspect()支持多个配置参数,适配不同场景需求:
depth: 控制嵌套对象的显示深度,默认值为2,设为Infinity可显示全部嵌套层级colors: 是否保留ANSI颜色码,默认true,不需要颜色输出时设为falsecompact: 是否压缩输出格式,默认true,设为false会展开成多行易读格式
示例:
const deepNestedObj = { level1: { level2: { level3: { level4: "deep value" } } } }; // 限制显示深度为2 console.log(Deno.inspect(deepNestedObj, { depth: 2 })); // 输出:{ level1: { level2: [Object] } } // 展开多行显示且无颜色 console.log(Deno.inspect(user, { compact: false, colors: false })); // 输出: // { // name: "Alice", // age: 30, // hobbies: [ // "reading", // "coding" // ] // }
封装通用格式化函数(可选)
如果需要统一处理所有类型的变量,可以封装一个默认配置适配大多数场景的函数:
function formatValue(value: unknown): string { return Deno.inspect(value, { colors: false, depth: Infinity, compact: true, }); } // 测试各类特殊类型 console.log(formatValue(new TypeError("类型错误"))); console.log(formatValue(new Map([["key1", "value1"], ["key2", "value2"]]))); console.log(formatValue((x: number) => x * 2));
该函数会自动处理Error、Map、Set、函数等特殊类型,输出结果和console.log()直接打印的内容完全一致。
内容的提问来源于stack exchange,提问作者Dr. Light
相关产品推荐
相关产品推荐

