代码之家  ›  专栏  ›  技术社区  ›  prmph

使用util.inspect检查深层对象相等性的利弊

  •  1
  • prmph  · 技术社区  · 8 年前

    在节点中使用inspect函数的优缺点是什么 检查深度对象相等性的模块,关于准确性和性能?我相信它至少比JSON.stringify()更全面

    下面的几个节点日志说明了util.inspect优于toString()和JSON.stringify()的准确性:

    > ([1,2, undefined]).toString()
    '1,2,'
    > ([1,2,null]).toString()
    '1,2,'
    
     JSON.stringify([1,2,null])
    '[1,2,null]'
    > JSON.stringify([1,2,undefined])
    '[1,2,null]'
    
    > require("util").inspect([1,2,undefined])
    '[ 1, 2, undefined ]'
    > require("util").inspect([1,2,null])
    '[ 1, 2, null ]'
    > require("util").inspect([1,2,"null"])
    '[ 1, 2, \'null\' ]'
    

    但我担心的是任何问题,还有表现上的影响。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Nino Filiu    7 年前

    使用它基本上有两个缺点 util.inspect

    • 字符串转换:未优化的性能
      • util.inspect({x: 10, y: 20}) == '{ x: 10, y: 20 }' 但是 util.inspect({y: 20, x: 10}) == '{ y: 20, x: 10 }' keys are ordered in ES6 )
      • 两次检索相同的WeakSet条目可能会导致不同的输出

    在以下情况下,检查深度对象相等性可能会成功99% JSON.stringify util.inspect 但正是这0.1%的奇怪的角落案例仍然使它不适合正确的生产代码。

    util 提供 isDeepStrictEqual 这是专门为深度对象平等而设计的:它的性能更高 util.inspect (无字符串转换),使代码更干净(而不是比较转换后的字符串,而是使用人类可读的函数直接比较对象),并处理所有的角落情况。

    推荐文章