2017-07-27 11 views
2

SymbolsがES2015に追加されたことは知っていましたが、それについてはあまり読み上げていませんでした。私は今少し読んだことがあり、その目的は明らかに私が思っていたものではありません。プライベート属性を作成する方法を提供することが意図されているようです。私が理解しているのは、一部の機能的言語の原子に似ていて、バックアップされているのがhereであるということでした。思われるシンボルを使用して上記の場合ES2015シンボルは、文字列の代わりに固有の定数値として使用できますか?

export const FOO = 'This value is irrelevant as long as its unique'; 
// or 
export const FOO = Symbol('A sensible description of what foo represents'); 

switch(blah): 
    case FOO: do_something(); 
    ... 

:私はそれは奇妙な、それは完全に私がincrorrectlyパターンマッチングのための文字列に、より意味のある代替手段を提供していた彼らの主な理由であったと想定していたものを言及しなかったことがわかります偶発的な衝突(つまり、同じ文字列に等しい2つの定数を作成する)から保護するという点で数多くの利点を持ち、毎回ユニークな文字列を出す負担を取り除き、そのコードについて誰かに明確な示唆を与えます意図された目的。最後の配慮は、Symbolが何のために使われるべきかの私の解釈に同意する他の人々にある程度依存しています。

とにかく、これはSymbolsの良いユースケースですか、そうでない場合はどうですか?

+0

Symbolが何であるかを理解している人々の間に意見の相違があるとは思わない。これは、オプションでプロパティとして使用できるユニークなトークンです。 – estus

答えて

5

プライベート属性を作成する方法を提供することが意図されているようです。

いいえ、まったくありません。非常に早い時期にそれが動機付けされましたが、仕様が完成するずっと前に捨てられました。彼らが何らかのプライバシーを提供することを意図していたなら、Object.getOwnPropertySymbolsはありません。

プライベートインスタンス情報には長い悩まされたパスがありましたが、それでもその過程を巡っています。現在はClass Fields proposalの一部です(以前は独自のものでした)。

とにかく質問ですが、これはSymbolの良いユースケースですか、そうでない場合はどうですか?

はい。 Symbolの主な目的の1つは、衝突のない一意の識別子を提供することです。 §4.3.25 - Symbol valueから

そして§6.1.5 - The Symbol Typeからキーユニークな、非文字列オブジェクトのプロパティを表しプリミティブ値:

可能な各シンボル値は、ユニークで不変です。

これは、動機づけには言いませんが、それは参考になります。

+0

ありがとう、私は私の推論がお金にあることを知ってうれしい! – redrah

関連する問題