简介
在本实验中,我们将探讨 JavaScript 中对象相等性的概念。我们将学习如何使用各种技术对两个值进行深度比较,以确定它们是否相等,例如检查值是否相同、检查它们是否为具有相等值的非对象值,以及使用 Object.keys() 检查两个值是否具有相同数量的键。我们还将了解如何使用递归来比较嵌套对象。
如何在 JavaScript 中检查对象相等性
要检查两个值是否相等,请执行以下步骤:
- 打开终端/SSH 并输入
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 中练习更多实验来提升你的技能。