JS: Как определить, что конкретная переменная - это Map/Set

Всем привет!

Столкнулся с проблемой, где мне нужно точно определить что конкретная переменная является Set / Map / WeakSet / WeakMap. У массивов есть метод Array.isArray(), но я не нашёл такого метода у Map / Set / ... . Они по своей сущности являются объектами, поэтому проверка на тип вернёт 'object'

let value = new Set();
console.log(typeof value) // 'object'

Поэтому, чтобы определить, что данная переменная является Set-ом я писал так:

let value = new Set(); // тут может быть Map / WeakSet / WeakMap
if (typeof value === 'object') {
    if (Object.getPrototypeOf(value) === Object.getPrototypeOf(new Set())) { // Map / ...
        // выполняемый код
    }
}

Вопрос. Есть ли более приятный, читабельный вариант такой проверки? Как правильно определить, что переменная является Set-ом / Map-ом / ...


Ответы (1 шт):

Автор решения: smellyshovel

Объекты, созданные при помощи конструкторов Map и Set являются инстансами собственно Map и Set. А проверка на то, является ли объект инстансом чего-либо осуществляется при помощи оператора instanceof:

const map = new Map();
const set = new Set();
const notMapNorSet = {};

// should print out "true, true, false, false"
document.write([
  set instanceof Set,
  map instanceof Map,
  notMapNorSet instanceof Map,
  notMapNorSet instanceof Set
].join(", "));

→ Ссылка