lundi 23 février 2015

How do the conditions in this if statement work? (Javascript)

I was looking at the solution from Eloquent Javascript Chapter 4 Exercise 4.4, and I am not sure how the conditions in this if statement work:



if (!(prop in a) || !deepEqual(a[prop], b[prop]))


The context of the if statement:



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


Edit: Additional question: Does the above code contain a recursive function?


Aucun commentaire:

Enregistrer un commentaire