我正在尝试学习单元测试,我找到了Ben Alman写的这个overview。在幻灯片23中,他展示了包含对象{a: 1}的名为actual的变量如何不等于对象本身。那是什么意思?它们不是相同的值吗?这些对象怎么会不同呢?
test("deepEqual", 7, function() {
var actual = {a: 1};
equal( actual, {a: 1}, "fails because objects are different");
deepEqual(actual, {a: 1}, "passes because objects are equivalent");
deepEqual(actual, {a: "1"}, "fails because '1' !== 1");
var a = $("body > *");
var b = $("body").children();
equal( a, b, "fails because jQuery objects are different");
deepEqual(a, b, "fails because jQuery objects are not equivalent");
equal( a.get(), b.get(), "fails because element arrays are different");
deepEqual(a.get(), b.get(), "passes because element arrays are equivalent");
});发布于 2014-12-01 14:00:40
JS中的对象永远不会相同,即使它们的值看起来是相同的。主要归结为不同的实例。有关Sameness in JavaScript的更多信息,请阅读。在StackOverflow上也有关于真实细节的much better答案。
您可以看到deepEqual如何确定对象的“相同”here。另一个值得关注的好例子是lodash's implementation
https://stackoverflow.com/questions/27222223
复制相似问题