2015-05-18 13 views
10

Ich frage mich, ob es eine gute Möglichkeit gibt, die Beschreibungen eines Symbols zu erhalten.Erhalte die Beschreibung eines ES6 Symbols

Zum Beispiel

var s = Symbol(5); 

Die Standardimplementierung des toString einfach gedruckt wird Symbol (5)

Ich mag würde einen Weg finden, um die tatsächliche Beschreibung dh 5

+2

kann regex: '/^Symbol \ ((. +?) \) $ /. Exec (" Symbol (5) ");' oder slice: '" Symbol (5) ". Slice (7, - 1); ' – Hacketo

+0

Danke für Ihren Kommentar. Das ist im Grunde, was ich getan habe. Aber ich dachte, es gibt eine vordefinierte API dafür. – ppoliani

+0

Könnten Sie näher erläutern, was Sie damit erreichen wollen? Es gibt keine offengelegte API, da Sie eigentlich nicht auf diesen Wert zugreifen sollten. Es ist nur wirklich zu Debuggingzwecken da. – loganfsmyth

Antwort

0

zu extrahieren Es gibt keinen ordentlichen Weg, dies zu tun. Wenn Sie jedoch ein Symbol in der globalen Registrierungsdatenbank registriert haben, können Sie Symbol.keyFor() verwenden:

var s = Symbol.for(5); 
console.log(Symbol.keyFor(s)); 
3
String(symbol).slice(7, -1) || null 

Dies funktioniert, weil String(symbol) explizit auf das Symbol in einen String coerce z.B. Symbol('test') wird in "Symbol(test)" gezwungen.

ein Spleißen auf dem von 7 bis Doing -1 hat einen Spleiß zwischen den beiden Klammern, so dass die Beschreibung

Hinweistest erfassen: dass dies nicht für Objektbeschreibungen (zB Symbol({test})) arbeiten kann als Objekte bekommen dazu gezwungen in "[object Object]"

+1

Hi! Willkommen bei Stack Overflow. Können Sie bitte eine Erklärung hinzufügen, wie/warum dies die Frage beantwortet? –

+1

Es gibt keine Symbole mit Objektbeschreibungen, die Beschreibung wird immer in eine Zeichenfolge umgewandelt. – Bergi

0

symbol-description Paket auf npm

Returns Beschreibung versehen Symbol:

const symDesc = require('symbol-description') 
symDesc(Symbol('foo')) // foo 

Es wurde von mir gerade jetzt nach dem Lesen this answer here veröffentlicht.

+2

Sie haben also ein npm-Paket für eine Codezeile erstellt? – zfrisch

+1

Ich habe es für dich getan. – mightyiam