确定对象是否是JavaScript中的映射

确定对象是否是JavaScript中的映射,javascript,instanceof,typeof,Javascript,Instanceof,Typeof,我正在编写一个函数,如果传递给它的参数是JavaScript实例,它将返回true 正如您可能猜到的那样,typeof new Map()返回字符串object,我们没有一个方便的Map.isMap方法 以下是我到目前为止的情况: 函数isMap(v){ 返回映射类型!==“未定义”&& //在另一个窗口上下文中创建的地图的gaurd Map.prototype.toString.call(v)=='[对象映射]'|| //高尔德反对推翻托斯特林 v映射实例; } (功能测试){ 常量映射=新

我正在编写一个函数,如果传递给它的参数是JavaScript实例,它将返回
true

正如您可能猜到的那样,
typeof new Map()
返回字符串
object
,我们没有一个方便的
Map.isMap
方法

以下是我到目前为止的情况:

函数isMap(v){
返回映射类型!==“未定义”&&
//在另一个窗口上下文中创建的地图的gaurd
Map.prototype.toString.call(v)=='[对象映射]'||
//高尔德反对推翻托斯特林
v映射实例;
}
(功能测试){
常量映射=新映射();
写入(isMap(map));
Map.prototype.toString=函数myToString(){
返回“其他东西”;
};
写入(isMap(map));
}());
函数写入(值){
document.write(`${value}
`);
}
您可以检查
Object.prototype.toString.call(newtestwindow.Map)


如果这一点被忽略了,你可能就不走运了。

有趣的是,我没有想到这一点。我想这确实增加了一个额外的确定性步骤。我不会担心
toString
被覆盖(如果你先来,你可以缓存它),而是担心
Symbol.toStringTag
@Bergi,这怎么会是重复的?你的回答提倡使用
instanceof
我的问题说明了我在
instanceof
上遇到的问题,而且你在集合上检查的内部方法不适用于
Map
原型(我想)。集合和映射完全一样。我想我最好把答案编辑成规范的。@Bergi请看上面的编辑,我的评论。请看:-)如果你不喜欢
instanceof
,你可以使用其他方法,并且支持
Map
而不是
Set
,这只是一个正确名称的选择。注意,这个问题正在讨论中。