Set.prototype.has() в JavaScript

Метод has() проверяет, есть ли значение в коллекции Set. Если есть, он возвращает true, иначе - false.

Синтаксис

set.has(value)

Обычно метод вызывают у конкретной коллекции. Запись Set.prototype.has означает, что этот метод доступен всем объектам Set.

let technologies = new Set(['HTML', 'CSS', 'JavaScript'])

technologies.has('CSS') // true
technologies.has('React') // false

У Set нет метода includes(). Для проверки значения используется именно has().

Проверка перед действием

Результат has() удобно использовать в условии, когда дальнейшее действие зависит от того, встречалось ли значение раньше.

let viewedLessons = new Set([101, 102])
let lessonId = 103

if (viewedLessons.has(lessonId)) {
  console.log('Урок уже просмотрен')
} else {
  console.log('Урок ещё не просмотрен')
}

Перед добавлением значения вызывать has() не обязательно: Set сам не добавит повтор.

let viewedLessons = new Set([101, 102])

viewedLessons.add(102)

console.log(viewedLessons.size) // 2

Проверка объектов

Объекты сравниваются по ссылке. Поэтому для проверки нужно передать тот же объект, который был добавлен в Set.

let user = { id: 1 }
let users = new Set([user])

users.has(user) // true
users.has({ id: 1 }) // false