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 шт):
Объекты, созданные при помощи конструкторов 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(", "));