Введение
В этом практическом занятии мы изучим концепцию равенства объектов в JavaScript. Мы узнаем, как провести глубокое сравнение между двумя значениями, чтобы определить, равны ли они, с использованием различных методов, таких как проверка на идентичность значений, проверка на то, являются ли они не-объектными значениями с равными значениями, и использование Object.keys() для проверки, имеют ли оба значения одинаковое количество ключей. Мы также поймем, как использовать рекурсию для сравнения вложенных объектов.
Как проверить равенство объектов в JavaScript
Чтобы проверить, равны ли два значения, следуйте этим шагам:
- Откройте Терминал/SSH и введите
node, чтобы начать практиковаться в написании кода. - Проведите глубокое сравнение между двумя значениями с использованием функции
equals(). - Проверьте, идентичны ли два значения. Если да, верните
true. - Проверьте, являются ли оба значения объектами
Dateс одинаковым временем, используяDate.prototype.getTime(). Если да, вернитеtrue. - Проверьте, являются ли оба значения не-объектными значениями с равными значениями (строгая сравнение). Если да, верните
true. - Проверьте, является ли только одно значение
nullилиundefined, или отличаются ли их прототипы. Если да, вернитеfalse. - Если ни одно из вышеперечисленных условий не выполняется, используйте
Object.keys(), чтобы проверить, имеют ли оба значения одинаковое количество ключей. - Используйте
Array.prototype.every(), чтобы проверить, существует ли каждый ключ вaвbи являются ли они равными при рекурсивном вызовеequals().
Используйте следующий код для реализации функции equals():
const equals = (a, b) => {
if (a === b) return true;
if (a instanceof Date && b instanceof Date)
return a.getTime() === b.getTime();
if (!a || !b || (typeof a !== "object" && typeof b !== "object"))
return a === b;
if (a.prototype !== b.prototype) return false;
const keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every((k) => equals(a[k], b[k]));
};
Используйте следующие примеры кода, чтобы протестировать функцию equals():
equals(
{ a: [2, { e: 3 }], b: [4], c: "foo" },
{ a: [2, { e: 3 }], b: [4], c: "foo" }
); // true
equals([1, 2, 3], { 0: 1, 1: 2, 2: 3 }); // true
Резюме
Поздравляем! Вы завершили практическое занятие по проверке равенства объектов. Вы можете выполнить больше практических заданий в LabEx, чтобы улучшить свои навыки.