在哪里可以找到在特定参数中返回true的deepEqual()函数的源代码



NodeJS函数assert.deepEqual((与assert.equal((一样工作,但可以递归地比较数组、映射、集合和对象。

例如,

let m1 = new Map([[[1,2],[3,4]],[[3,4],[1,2]]]);
console.log(m1);
// => Map(2) { [ 1, 2 ] => [ 3, 4 ], [ 3, 4 ] => [ 1, 2 ] }
let m2 = new Map([[[3,4],[1,2]],[[1,2],[3,4]]]);
console.log(m2);
// => Map(2) { [ 3, 4 ] => [ 1, 2 ], [ 1, 2 ] => [ 3, 4 ] }
// Where can I find this function? 
deepEqual(m1,m2) // => true
let s1 = new Set([[1,2],[3,4]]);
console.log(s1);
// => Set(2) { [ 1, 2 ], [ 3, 4 ] }
let s2 = new Set([[3,4],[1,2]]);
console.log(s2);
// => Set(2) { [ 3, 4 ], [ 1, 2 ] }
// Where can I find this function? 
deepEqual(s1,s2) // => true

以上示例不适用于nodejs模块的标准assert.deepEqual函数。

理想情况下,函数应该递归地检查参数的等价性。但是,由于值的顺序被破坏,函数找不到它们的等价性。

我在文档中找到了这个

比较详细信息

  • 使用Object.is((使用的SameValue Comparison比较基元值
  • 对象的类型标记应该相同
  • 使用严格相等比较来比较对象的原型
  • 只有可枚举的"拥有";属性
  • 错误名称和消息总是进行比较,即使它们不是可枚举的属性
  • 还比较了可枚举的自身Symbol属性
  • 将对象包装器作为对象和展开的值进行比较
  • 对象属性的比较是无序的
  • 映射键和Set项按无序顺序进行比较
  • 当双方不同或双方都遇到圆形引用时,递归停止
  • WeakMap和WeakSet的比较不依赖于它们的值。有关更多详细信息,请参见下文

这种实现不适合在这种情况下寻找等价性。

不确定您是否在谈论assert.deepEqual。如果是这样,那么您应该能够通过访问Node的文档并查看Module的信息来了解deepEqual的实现。

在这种情况下,断言。访问后,您将看到一个指向实际源代码的链接,该链接指向libs/assert。

如果这不是你想要的,请提供更多关于你的问题的信息,这样其他人也可以理解并做出相应的回答。