我正在编写大量的单元测试,并且想知道比较两个javascript对象(实际值与预期值)的值的最佳方法是什么。可以说我有以下内容
ActualObject: {
Val1: '1',
Val2: '2',
Val3: '3',
Val4: '4'
}
ExpectedObject: {
Val1: '1',
Val2: '2',
Val3: '3',
Val4: '4'
}
现在,我要检查每个对象中的属性值是否相等。做这个的最好方式是什么。目前,我正在逐个比较所有属性。我可以想到的替代方法是JSON.stringify,但是我不确定这是否会随机更改属性的顺序?
答案 0 :(得分:0)
实际上,没有一个简单的“一刀切”的解决方案,尤其是在您的问题的参数很广泛的情况下。例如,您会考虑平等吗?严格?疏松?是否只有自己的可枚举属性或所有属性相等?
我建议避免使用JSON.stringify
,因为1)序列化对象是一项相当昂贵的操作,尤其是在频繁执行时,以及2)为了比较起见,它会以潜在危险的方式转换值(例如{ {1}}。
您应该使用诸如lodash's isEqual
之类的库实现,从而省去了重新发明轮子的麻烦。
但是,为了完整起见,并为您提供一种简单,幼稚的方法,您可以遍历对象JSON.stringify(NaN) === JSON.stringify(null) //=> true
的每个属性,并检查与对象{{ 1}},就像这样:
ExpectedObject
显然,您需要引入类型检查,以使您知道要开始处理的对象,但是有一个基本概念可供您考虑。