2015-05-18 16 views
10

Zastanawiam się, czy istnieje dobry sposób na uzyskanie opisów symbolu.Pobierz opis symbolu ES6

Na przykład

var s = Symbol(5); 

Domyślna implementacja toString będzie po prostu wydrukować Symbol (5)

Chciałbym znaleźć sposób, aby wyodrębnić rzeczywisty opis czyli 5

+2

można używać wyrażeń regularnych: '/^Symbol \ ((. +?) \) $ /. Exec (" Symbol (5) ");' lub plaster: '" Symbol (5) ". Slice (7, - 1); ' – Hacketo

+0

Dzięki za komentarz. W zasadzie to właśnie skończyłem. Ale myślałem, że jest do tego predefiniowany API. – ppoliani

+0

Czy mógłbyś wyjaśnić, co właściwie chcesz osiągnąć, robiąc to? Nie ma odsłoniętego interfejsu API, ponieważ w rzeczywistości nie powinno się uzyskiwać dostępu do tej wartości. Naprawdę jest tam tylko do celów debugowania. – loganfsmyth

Odpowiedz

0

Nie ma na to sposobu. Jednakże, jeśli jesteś zarejestrowany symbol w światowym rejestrze, można użyć Symbol.keyFor():

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

To działa, ponieważ String(symbol) jawnie wymusić symbol na ciąg znaków np Symbol('test') zostaje przymuszony do "Symbol(test)".

Doing spawy na od 7 do -1 robi składanie między dwoma wspornikami, więc uchwycenie opis test

Uwaga: że nie może pracować dla opisami obiektów (np Symbol({test})) jako obiekty dostaje zmuszane do "[object Object]"

+1

Witam! Witamy w Stack Overflow. Czy możesz dodać wyjaśnienie, jak/dlaczego to odpowiada na pytanie? –

+1

Brak symboli z opisami obiektów, opis jest zawsze rzutowany na ciąg znaków. – Bergi

0

symbol-description pakietu na KMP

Zwraca opis przewidzianego symbolem:

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

Został opublikowany przeze mnie właśnie po przeczytaniu this answer here.

+2

Więc stworzyłeś pakiet npm dla jednej linii kodu? – zfrisch

+1

Zrobiłem to dla ciebie. – mightyiam