Javascript Set имеет метод () ведет себя по-разному в зависимости от того, как я определил параметр, который я передаю - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь найти решение проблемы уникальности в программе, которую я пишу с использованием 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 голосов
/ 26 октября 2019

В частности, это не имеет ничего общего с методом has, так сравниваются объекты в JS.

1-й сбой, потому что значение, которое вы устанавливаете, и значение, которое вы проверяете, являются двумя отдельными ссылками ив JS две ссылки никогда не могут быть равны

2-й фрагмент дает значение true, так как значение, которое вы устанавливаете и пытаетесь проверить обе, являются одной и той же ссылкой, поэтому это приводит к true

let obj = {a:'a'}

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