确定变量是ES2015 Map还是普通旧JavaScript对象

时间:2016-09-08 19:26:41

标签: javascript ecmascript-6

我正在为ES2015类编写一个构造函数,它将接受Map或普通的旧JavaScript对象。如果输入参数是Map,构造函数将只存储它,但如果它是JS对象,它应该将它转换为Map,例如InputStream is = sock.getInputStream() BufferedInputStream bis = new BufferedInputStream(is); int nextByte; StringBuilder sb = new StringBuilder(); while( (nextByte = bis.read()) != -1 ) { sb.append(String.format("%02X ", nextByte)); }

我的问题是:如何安全地判断输入参数是Map还是Object?我可以测试一些特定于Map的方法,但是有更可靠和可读的方法吗?据我所知,没有地图相当于new Map(Object.keys(obj).map(k => [k, obj[k]]))

2 个答案:

答案 0 :(得分:2)

使用instanceof operator

const map = new Map()
     ,obj = {}
console.log(map instanceof Map) // true
console.log(obj instanceof Map) // false

此外,如果要将对象转换为地图,则可以使用Object.entries()

new Map(Object.entries(obj))

答案 1 :(得分:1)

您可以使用instanceof Map来测试它是否为地图