Кратко
Секция статьи "Кратко"Метод has
проверяет, содержится ли значение в коллекции Set
. Если значение есть в коллекции, метод вернёт true
, в противном случае — false
.
Пример
Секция статьи "Пример"const watchList = new Set(['Сияние', 'Интерстеллар', 'Казино'])console.log(watchList.has('Казино'))// trueconsole.log(watchList.has('Чёрная пантера'))// false
const watchList = new Set(['Сияние', 'Интерстеллар', 'Казино']) console.log(watchList.has('Казино')) // true console.log(watchList.has('Чёрная пантера')) // false
Как пишется
Секция статьи "Как пишется"Метод принимает один аргумент — значение, которое нужно проверить.
Возвращает булево значение:
true
если коллекция содержит искомое значение;false
если значения в коллекции нет.
На практике
Секция статьи "На практике"🛠 Нужно быть осторожным при работе с объектами. Объекты хранятся и сравниваются по ссылке, поэтому результат такого кода может удивить:
const users = new Set([ {name: 'Иван', lastName: 'Петров'}, {name: 'Пётр', lastName: 'Иванов'}])console.log(users.has({name: 'Иван', lastName: 'Петров'}))// false 🤷♂️
const users = new Set([ {name: 'Иван', lastName: 'Петров'}, {name: 'Пётр', lastName: 'Иванов'} ]) console.log(users.has({name: 'Иван', lastName: 'Петров'})) // false 🤷♂️
Дело в том, что два Ивана Петрова на самом деле разные Иваны Петровы. Это легко заметить, если обратить внимание на фигурные скобки. Каждая пара фигурных скобок создаёт новый независимый объект, хотя они и выглядят одинаково.
Если сравнить их между собой, то результат сравнения тоже будет false
:
console.log({name: 'Иван', lastName: 'Петров'} === {name: 'Иван', lastName: 'Петров'})// false
console.log({name: 'Иван', lastName: 'Петров'} === {name: 'Иван', lastName: 'Петров'}) // false
Проверка сработает корректно, если мы будем искать тот же объект:
const petrov = {name: 'Иван', lastName: 'Петров'}const ivanov = {name: 'Пётр', lastName: 'Иванов'}const users = new Set([petrov, ivanov])console.log(users.has(petrov))// true
const petrov = {name: 'Иван', lastName: 'Петров'} const ivanov = {name: 'Пётр', lastName: 'Иванов'} const users = new Set([petrov, ivanov]) console.log(users.has(petrov)) // true
🛠 Если вам нужно добавить значение в Set
, то можно не проверять, есть ли уже значение в коллекции. Вызывайте add
. Если элемент уже есть в коллекции, то добавление будет проигнорировано. Аналогично с delete
.