JavaScript Set has()方法的行为根据我定义的传入参数的方式而有所不同

时间:2019-10-26 16:28:22

标签: javascript set

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

has方法无关,这就是在JS中比较对象的方式。

第一个失败,因为您设置的值和要检查的值是两个单独的引用,而在JS中,两个引用永远不能相等

第二个代码段的结果为true,因为您设置的值和尝试检查的值都是相同的引用,因此得出true

let obj = {a:'a'}

console.log(obj === obj)
console.log(obj === {a:'a'})