检查对象相等性

JavaScriptJavaScriptBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探讨 JavaScript 中对象相等性的概念。我们将学习如何使用各种技术对两个值进行深度比较,以确定它们是否相等,例如检查值是否相同、检查它们是否为具有相等值的非对象值,以及使用 Object.keys() 检查两个值是否具有相同数量的键。我们还将了解如何使用递归来比较嵌套对象。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript/BasicConceptsGroup -.-> javascript/variables("`Variables`") javascript/BasicConceptsGroup -.-> javascript/data_types("`Data Types`") javascript/BasicConceptsGroup -.-> javascript/arith_ops("`Arithmetic Operators`") javascript/BasicConceptsGroup -.-> javascript/comp_ops("`Comparison Operators`") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("`Conditional Statements`") javascript/BasicConceptsGroup -.-> javascript/array_methods("`Array Methods`") javascript/AdvancedConceptsGroup -.-> javascript/proto_inherit("`Prototypes and Inheritance`") javascript/AdvancedConceptsGroup -.-> javascript/destr_assign("`Destructuring Assignment`") subgraph Lab Skills javascript/variables -.-> lab-28261{{"`检查对象相等性`"}} javascript/data_types -.-> lab-28261{{"`检查对象相等性`"}} javascript/arith_ops -.-> lab-28261{{"`检查对象相等性`"}} javascript/comp_ops -.-> lab-28261{{"`检查对象相等性`"}} javascript/cond_stmts -.-> lab-28261{{"`检查对象相等性`"}} javascript/array_methods -.-> lab-28261{{"`检查对象相等性`"}} javascript/proto_inherit -.-> lab-28261{{"`检查对象相等性`"}} javascript/destr_assign -.-> lab-28261{{"`检查对象相等性`"}} end

如何在 JavaScript 中检查对象相等性

要检查两个值是否相等,请执行以下步骤:

  1. 打开终端/SSH 并输入 node 以开始练习编码。
  2. 使用 equals() 函数对两个值进行深度比较。
  3. 检查两个值是否相同。如果是,则返回 true
  4. 使用 Date.prototype.getTime() 检查两个值是否都是具有相同时间的 Date 对象。如果是,则返回 true
  5. 检查两个值是否为具有相等值的非对象值(严格比较)。如果是,则返回 true
  6. 检查是否只有一个值为 nullundefined,或者它们的原型是否不同。如果是,则返回 false
  7. 如果上述条件都不满足,则使用 Object.keys() 检查两个值是否具有相同数量的键。
  8. 使用 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 中练习更多实验来提升你的技能。

您可能感兴趣的其他 JavaScript 教程