我认为这可能有点棘手,或者可能已经回答了,但是我找不到它。
无论如何,我想知道传递给我的函数的变量是否为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”方式可以知道哪种类型,但是我知道这是不正确的。
与比较原型相比,有人能提出更好的解决方案吗?
答案 0 :(得分:0)
过了一会儿,我刚刚提醒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 answer中查看有关此行为的更多信息,并且可以使用以下比较器
something.construtor === Map
但是它会有我们试图通过使用instanceof
运算符避免的警告