2016-09-08 1 views
1

ich einen Konstruktor für eine Klasse ES2015 mich schreibe, die entweder ein Map oder ein einfaches altes JavaScript-Objekt akzeptiert. Wenn das Eingabeargument eine Karte ist, speichert der Konstruktor wird es einfach, aber wenn es ein JS-Objekt ist, sollte es zu einer Map umwandeln, über, sagen wir, new Map(Object.keys(obj).map(k => [k, obj[k]])).fest, ob Variable ES2015-Karte oder ein einfaches altes JavaScript-Objekt ist

Meine Frage ist: Wie kann ich sicher sagen, ob ein Eingabeargument eine Karte oder Objekt? Ich kann auf einige Map-spezifische Methoden testen, aber gibt es einen zuverlässigeren und lesbareren Weg? Soweit ich das beurteilen kann, gibt es kein Map-Äquivalent von Array.isArray.

Antwort

1

können Sie instanceof Map verwenden, um zu testen, ob es sich um eine Karte

2

Nutzung ist die instanceof operator:

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

Sie können aber auch Object.entries() verwenden, wenn Sie ein Objekt konvertieren möchten eine Karte:

new Map(Object.entries(obj)) 
+3

'Object.entries' ist nicht ES6. – Bergi

Verwandte Themen