我正在尝试使用Sets和has()方法编写的程序中的唯一性问题的解决方案,但是我遇到了以下问题。似乎has()的行为有所不同,具体取决于我是否在has()调用内构建了变量(第一个代码示例,返回false)与是否在初始化手形变量并将其传入之前(第二个示例,返回true) 。
我希望有人可以对这里发生的事情有所了解,因为我不想在我们的代码库中引入错误。
const set1 = new Set([
{loc:"hello", x:1, y:2},
{loc:"Goodbye", x:1, y:2}
]);
console.log(set1.has(
{loc:"hello", x:1, y:2}
));
//outputs False
const elem = {loc:"hello", x:1, y:2};
const set1 = new Set([
elem,
{loc:"Goodbye", x:1, y:2}
]);
console.log(set1.has(
elem
));
//outputs True
答案 0 :(得分:0)
与has
方法无关,这就是在JS中比较对象的方式。
第一个失败,因为您设置的值和要检查的值是两个单独的引用,而在JS中,两个引用永远不能相等
第二个代码段的结果为true,因为您设置的值和尝试检查的值都是相同的引用,因此得出true
let obj = {a:'a'}
console.log(obj === obj)
console.log(obj === {a:'a'})