1

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

_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

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

有任何想法吗?

4

1 回答 1

2

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)中使用的散列函数也可用于生成对象的唯一散列。

这是我之前用来生成对象哈希的第 3 方库

于 2017-04-25T21:22:32.210 回答