【发布时间】:2018-10-28 18:26:25
【问题描述】:
在节点的util 模块中使用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\' ]'
但我担心任何问题,以及性能影响。
【问题讨论】:
-
IMO 使用
JSON.stringify()深入比较对象并不是一个好主意,因为它可能以不同的方式失败,首先是字符串化本身,例如当对象中有循环引用时。 Stringify 也会忽略你对象中的函数 -
嗨@kaddath,是的,我知道 JSON.stringify 的问题,这就是为什么我要询问 util.inspect 作为替代方案
-
您的目标是只检查相等还是检测差异?因为对于第一种情况,我看到有一个函数
util.isDeepStrictEqual返回一个布尔值,似乎就是为此而生的。对于你必须测试的性能,我不知道,但我觉得它可能应该比stringify慢一点,因为它必须采取额外的措施来处理边缘情况stringify没有
标签: javascript node.js equality