首页 > 解决方案 > 不要使用 util.inspect 记录符号

问题描述

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

{
  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() 对对象进行字符串化,我的偏好是向它传递一个选项,以不记录不可枚举的属性或不记录。

标签: javascriptnode.jses6-symbol

解决方案


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

为此,请定义如下符号:

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

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


1:遍历对象时隐藏不可枚举的属性。在 MDN此 SO 帖子中阅读更多信息


推荐阅读