我只想检查一个对象是Map
或Set
而不是Array
。
为了检查一个Array
,我使用lodash的_.isArray
。
function myFunc(arg) {
if (_.isArray(arg)) {
// doSomethingWithArray(arg)
}
if (isMap(arg)) {
// doSomethingWithMap(arg)
}
if (isSet(arg)) {
// doSomethingWithSet(arg)
}
}
如果我要实现isMap
/isSet
,它需要是什么样子?我希望它能够尽可能地捕获Map
/Set
的子类。
Object.prototype.toString.call(o) == '[object Set]'
?除了某些人覆盖Object.prototype.toString
之外,还有其他情况会导致失败吗?(我认为覆盖Object.prototype.toString
不值得担心 - 这是一种糟糕的做法,会破坏许多现有的库。) - Matt BrowneObject.prototype.toString
相当于使用Symbol.toStringTag
方法 - 你不需要覆盖全局,它可以在每个对象的基础上进行操作。 - Bergi