Клавиша / esc

.has()

Метод проверяет наличие значения в коллекции Set.

Время чтения: меньше 5 мин

Кратко

Скопировано

Метод 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().