Ваш код эквивалентен:
if (address1[key] === address2[key])
isEqual = true;
else
isEqual = false
break;
Вы должны заключить ваше условие else в {}
.В настоящее время он выходит из цикла на первой итерации
function Address(street, city, zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
let address1 = new Address('a', 'b', 'c');
let address2 = new Address('a', 'd', 'c');
let address3 = new Address('x', 'y', 'z');
let address4 = new Address('x', 'y', 'z');
//checking for equality between two objects
function areEqual(address1, address2) {
let isEqual = true;
for (let key in address1) {
if (address1[key] === address2[key])
isEqual = true;
else {
isEqual = false
break;
}
}
if (isEqual) return 'They are equal';
else return 'They are not equal';
}
console.log(areEqual(address1, address2));
console.log(areEqual(address3, address4));
Вы можете избежать подобных ошибок, если отформатируете свой код.Каждый редактор кода будет иметь ярлык для этой функции.
Примечание : поскольку у вас есть функция конструктора для Address
, этот код будет работать.Но обратите внимание, что это просто проверяет, имеют ли ключи в address1
то же значение, что и address2
.Если вы сравните пустой объект, подобный этому, areEqual({}, address2)
, он будет записывать They are equal
, потому что он никогда не входит в цикл for
.Таким образом, вы можете добавить дополнительную проверку, если Object.keys(address1).length
совпадает с address2