简介
在本实验中,我们将探讨 JavaScript 中对象相等性的概念。我们将学习如何使用各种技术对两个值进行深度比较,以确定它们是否相等,例如检查值是否相同、检查它们是否为具有相等值的非对象值,以及使用 Object.keys()
检查两个值是否具有相同数量的键。我们还将了解如何使用递归来比较嵌套对象。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将探讨 JavaScript 中对象相等性的概念。我们将学习如何使用各种技术对两个值进行深度比较,以确定它们是否相等,例如检查值是否相同、检查它们是否为具有相等值的非对象值,以及使用 Object.keys()
检查两个值是否具有相同数量的键。我们还将了解如何使用递归来比较嵌套对象。
要检查两个值是否相等,请执行以下步骤:
node
以开始练习编码。equals()
函数对两个值进行深度比较。true
。Date.prototype.getTime()
检查两个值是否都是具有相同时间的 Date
对象。如果是,则返回 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 中练习更多实验来提升你的技能。