知道某物是否为地图类型的最佳方法

时间:2019-03-22 08:35:44

标签: javascript comparison

我认为这可能有点棘手,或者可能已经回答了,但是我找不到它。

无论如何,我想知道传递给我的函数的变量是否为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())

这意味着有两种“ hacky”方式可以知道哪种类型,但是我知道这是不正确的。

与比较原型相比,有人能提出更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

过了一会儿,我刚刚提醒instanceof运算符

正确的方法是使用该运算符,如您所知,在变量没有构造函数的情况下进行比较时,它不会导致任何错误。就像变量是undefinednull

这是正确的

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 answer中查看有关此行为的更多信息,并且可以使用以下比较器

something.construtor === Map

但是它会有我们试图通过使用instanceof运算符避免的警告