Книга: Выразительный JavaScript
Глубокое сравнение
Глубокое сравнение
Оператор ==
сравнивает переменные объектов, проверяя, ссылаются ли они на один объект. Но иногда полезно было бы сравнить объекты по содержимому.
Напишите функцию deepEqual
, которая принимает два значения и возвращает true
, только если это два одинаковых значения или это объекты, свойства которых имеют одинаковые значения, если их сравнивать рекурсивным вызовом deepEqual
.
Чтобы узнать, когда сравнивать величины через ===
, а когда – объекты по содержимому, используйте оператор typeof
. Если он выдаёт "object"
для обеих величин, значит нужно делать глубокое сравнение. Примите во внимание одно дурацкое исключение, существующее по историческим причинам: typeof null
тоже возвращает "object"
.
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
- Сравнение ссылок
- Клонирование и сравнение объектов
- Глубокое клонирование и сравнение
- 8.1.4. Сравнение массивов
- 4.2 Сравнение SAN и NAS
- Сравнение C# и C++
- 3.2. Сравнение операционных систем
- Сравнение ценностных профилей партнеров
- Большое сравнение: Fedora, openSUSE, Ubuntu
- 12.2.3. Сравнение блоков памяти: memcmp()
- 13.2.3. Сравнение строк: strcoll() и strxfrm()
- Сравнение времени выполнения различных версий функции str_cli