有没有办法通过字面值(如字符串或数字)比较两个未引用的对象?
_is = function (a, b) {/* 代码 */}
这可以适用于任何对象类型,甚至是自定义对象。
_is(new X("a"), new X("a"));//返回真;
_is(new X("a"), new Y("a"));//返回假
你可以把它转换成一个字符串,但那会很草率。
JSON.stringify({ x: "a"}) == JSON.stringify({ x: "a"});//返回真值
也许有一种方法可以以编程方式读取对象的每个键、子键和值,并以这种方式进行比较。
有什么想法吗?
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 .