【问题标题】:Do not log symbols using util.inspect不要使用 util.inspect 记录符号
【发布时间】:2019-12-11 14:43:57
【问题描述】:

我有这个对象,上面有一些符号属性:

{
  foo: 'bar',
  [Symbol(raw.json.bytes)]: 13,
  [Symbol(raw.json.str)]: '{"foo":"bar"}'
} 

现在,我自己添加了这些符号属性,所以也许我可以使用 Object.defineProperty 更改添加它们的方式。是否有某种方法可以防止记录符号:

  1. 使用 util.inspect(v, opts) 的选项
  2. 或者通过使用 Object.defineProperty?

无论哪种方式,我都在使用 util.inspect() 对对象进行字符串化,并且我的偏好是向它传递一个选项,以不记录不可枚举的属性或不记录。

【问题讨论】:

  • 我尝试使用util.inspect(v, {showHidden: false})),但没有成功,可能是因为符号属性没有隐藏?但它们只是添加了o[Symbol()] = 'x'
  • 没有这样的东西:Object.definedProperty... 可能你的意思是Object.defineProperty

标签: javascript node.js es6-symbol


【解决方案1】:

您可以结合使用showHidden 选项false(默认)和不可枚举的符号,但这可能会产生副作用1

为此,请定义如下符号:

Object.defineProperty(obj,symbol,{
  enumerable: false,  //That matters
  configurable: true, //Or false
  writable: true,     //Or false
  value: someValue
})

如果showHidden 选项为假,则如上定义的属性(不一定是符号)将不会包含在util.inspect 调用中。


1:遍历对象时隐藏不可枚举的属性。阅读更多on MDNin this SO post

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多