【问题标题】:What is the purpose of comparing two objects? (as opposed to primitives)比较两个对象的目的是什么? (相对于原语)
【发布时间】:2019-06-02 10:53:08
【问题描述】:

我目前正在学习 Javascript(我熟悉 C# 和 Python),目前我正在阅读的教程正在讨论两个对象之间的比较。在我完成的编码中(我有各种项目),这种事情从来没有真正需要过。鉴于这对未来可能很重要,我想我会寻找何时/何地使用对象比较,但我能找到的只是关于它如何工作的问题/答案,而不是 为什么您应该使用它以及何时使用它。我想不出任何情况下基元之间的比较不会更好,所以在这方面的任何帮助都将不胜感激。

【问题讨论】:

  • 例如如果用户只需单击按钮两次/三次而不更改任何内容,则可以避免额外的计算/调用。

标签: javascript object compare


【解决方案1】:

当您有两个引用对象的变量并且您想查看它们是否引用同一个对象时,您会使用它。例如,使用window 对象,您可以这样做

if (window !== window.top) {
  console.log('This script must be running in an iframe!');
}

我想不出有什么情况会比原语更好

许多对象(包括window)不能轻易地转换为唯一的原语。

您也许可以使用JSON.stringify 将普通对象转换为字符串,然后比较这些字符串,但这并不能帮助您比较对象是否实际上是内存中的同一对象 em>:

const obj1 = { prop: 'val' };
const obj2 = { prop: 'val' };
// They are not the same object
console.log(obj1 === obj2);
// But if you convert them to a primitive string first, you won't be able to tell
console.log(JSON.stringify(obj1) === JSON.stringify(obj2));

【讨论】:

    【解决方案2】:

    冒着循环论证的风险,在需要时使用它。 :-)

    我会说它与 C# 中的大致相同。在这两种情况下,当您使用相等运算符时,它会测试它们是否是同一个对象(而不是单独但等效的对象)。

    例如,假设您有一个对象数组,并且该数组的内容可以更改。稍后,您有一个应该删除的对象。您将要删除的对象与数组中的对象进行比较,看看是否应该删除它(通常在 filter 操作中):

    arrayOfObjects = arrayOfObjects.filter(obj => obj !== objToRemove);
    

    【讨论】:

    • (叹气。如果您在上面看到===,请点击刷新。)
    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多