概念:在 JavaScript 中比较对象和数组,如字符串和数字

Concept: Comparing objects and arrays like atrings and numbers in JavaScript

有没有办法通过字符串或数字等字面值来比较两个未引用的对象?

_is = function (a, b) { /* Code */ }

这可以适用于任何对象类型,甚至是自定义对象。

_is(new X("a"), new X("a")); // Returns True;

_is(new X("a"), new Y("a")); // Returns False

您可以将其转换为字符串,但这样会很草率。

JSON.stringify({ x: "a" }) == JSON.stringify({ x: "a" }); // Returns True

也许有一种方法可以以编程方式读取对象的每个键、子键和值,并以这种方式进行比较。

有什么想法吗?

Javascript 使用唯一的内存指针对内存中的对象进行哈希处理。您实质上是在创建两个单独的对象,并尝试比较它们。尽管它们看起来相似,但实际上它们是不同的。

首先尝试将对象存储为变量,然后针对该变量进行测试。

pass = arg => { return arg }; pass({ a: "x" }); // Returns The Input

pass(({ a: "x" })) == ({ a: "x" }); // Returns False

var obj = {a: "x"};

pass(obj) === (obj); // Returns true

console.log(pass(obj) === (obj));

更新:

如果你想比较两个单独的对象,我发现最好和最有效的方法是创建两个对象的散列,然后比较散列(基本上是比较两个校验和)。如果哈希匹配,则对象相同。如果哈希值不同,则它们是不同的对象。您可以假设每个对象的属性和值都相同,因为使用散列函数,甚至可以利用某些形式的加密(如 md5 和 sha)中使用的散列函数来生成对象的唯一散列。

Here's a 3rd Party Library I've used before to generate object hashes.