Лучший способ узнать, что-то типа карты - PullRequest
0 голосов
/ 22 марта 2019

Я думаю, что это может быть немного сложно, или, возможно, на него уже ответили, но я не могу его найти.

В любом случае, я хочу знать, была ли переменная, переданная в мою функциюэто Map()

OFC, оператор typeof вернул бы объект для карты.

Мне было интересно, стоит ли делать что-то вроде следующего, имеет ли это смысл?

var something = new Map()

console.log(something.constructor.prototype.toString())
console.log(Map.prototype.toString())
console.log(something.constructor.prototype.toString() === Map.prototype.toString())

console.log(something.constructor.toString())
console.log(Map.toString())
console.log(something.constructor.toString() === Map.toString())

Это означает, что есть 2 "хакерских" способа узнать, какой это тип, но я знаю, что это не правильно.

Может кто-нибудь придуматьс лучшим решением, чем сравнение прототипов?

1 Ответ

0 голосов
/ 22 марта 2019

Через некоторое время я просто напомнил оператор instanceof

. Правильно было бы использовать этот оператор, так как вы точно знаете, что он не приведет к какой-либо ошибке при сравнении, когдапеременная не имеет конструктора.Например, когда переменная undefined или null

Это будет правильно

var something = new Map()
var nothing = null

console.log(something instanceof Map)
console.log(something instanceof Object)
console.log(nothing instanceof Map)

Как указано в комментариях, из-за способа работы оператора instaceof может случиться так, что если есть переменная, которая наследуется от Map, то instanceof проверка все равно будет проходить

Как видите, something instanceof Object - это истина, что происходит потому, что Map наследуется от Object

. Вы можете увидеть больше информации об этом поведении.в этом SO ответе и вы можете использовать следующий компаратор

something.construtor === Map

Но он будет иметь те же предостережения, которых мы пытались избежать, используя instanceof оператор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...