2017-11-13 7 views
3

のキーと値のペアのキーとしてES6 Symbolを使用すると、ページをリロードした後も引き続きアクセスできますか? Local StorageでES6シンボルを使用することはできます

私は Symbol.forを使用するときにこれが可能であることを主張 this tutorialを見つけましたが、今のところ私は成功を持っていないと私はのlocalStorageキー/値のペアを取得しようとすると、 undefinedを取得します。

ここではSymbolsを使用することは意味がありますか?

+0

ここでは動作しない例を共有できますか?たとえば、jsbin.comで指定します。 – sdgluck

答えて

3

記号をオブジェクトのキーとして使用することができます。これは最終的に目的です。しかし、localStorageは典型的なオブジェクトではありません。ストアに値を設定/取得するためのAPIがあります。チュートリアルにはlocalStorage.{set,get}Item()が使用されていません。

残念ながらlocalStorageはシンボルをキーとして受け付けません。文字列のみを受け取ります。実際の答えはいいえではありませんが、SymbolsをLocalStorageのキーとして使用することはできませんが、...

次のことを行います。これは、実際にはキーとしてシンボルを使用しますが、シンボルtoString()表現されていません:それはこっちの記号を使用しても意味がない:側の問題として

const sym = Symbol.for('Hello').toString() 
localStorage.setItem(sym, 'World') 
document.write('Hello, ' + localStorage.getItem(sym)) 

[Check it out on jsbin.com]

私はあなたがグローバルlocalStorageの機能を拡張するために予約されたシンボル(例えばSymbol.iterator)を使用する可能性があるとします。しかしそれはその要点のようなものです。

+0

これは、 "Symbol(isShown)"という文字列のキーの下に値を保存することを意味しますか?それでは、 "isShown"と言うキーの代わりにこれを使う利点は何ですか? – sjbuysse

+1

@sjbuysseなし。それで、あなたはこれをしてはいけないのです。 – Bergi

+2

@sjbuysse利点はありませんが、アプリケーション内のオブジェクト内の他の場所でシンボルを使用していて、一貫性のためにLocalStorageでも使用したいと思うかもしれません。 – sdgluck

関連する問題