目前我正在学习一本书,但是对以下代码感到非常困惑,已经尝试多次理解。我的第一个疑问是如何比较两个对象a和b。
function deepEqual(a, b) {
if (a === b) return true;
if (a == null || typeof a != "object" ||
b == null || typeof b != "object")
return false;
var propsInA = 0, propsInB = 0;
for (var prop in a)
propsInA += 1;
for (var prop in b) {
propsInB += 1;
if (!(prop in a) || !deepEqual(a[prop], b[prop]))
return false;
}
return propsInA == propsInB;
}
var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true
{a:1,b:2}
与{a:1}
进行比较,你会得到一个错误的结果。另一种方法是迭代两个对象并进行比较;计数器消除了对“双重”迭代的需求。 - dandavis!=
表示 "不等于"。typeof a != "object"
表示 a 不是类型为 "object" 的对象。 - Juan Tomas