54

オブジェクトのプロパティに直接アクセスするのではなく、localStorageオブジェクトで定義されたメソッドを使用することにはいくつかの利点がありますか?たとえば、次の代わりに:

var x = localStorage.getItem(key);
localStorage.setItem(key, data);

私はこれをやっています:

var x = localStorage[key];
localStorage[key] = data;

これに何か問題がありますか?

4

4 に答える 4

33

実際には、それらは基本的にまったく同じです。1つは、カプセル化(getter / setter)を使用して、データをより適切に保護し、簡単に使用できるようにします。このスタイルを使用することになっています(セキュリティのため)。

もう1つは、名前(キー)が不明な場合、および配列とループの場合に、より適切に使用できるようにします。を使用.key().lengthて、実際のキー名を知らなくてもストレージアイテムを反復処理します。

これは素晴らしいリソースであることがわかりました:http://diveintohtml5.info/storage.html

この質問は、一部の人にもより多くの洞察を提供する可能性があります:HTML5localStorageキーの順序

補遺:

明らかに、カプセル化についていくつかの混乱がありました。この簡単なウィキペディアをチェックしてください。しかし、真剣に、私はこのサイトのユーザーがグーグルする方法を知っていることを望みます。

先に進むと、カプセル化とは、別のシステムと通信するためのポータルの出入りをほとんど行わないという考え方です。他の人が使用できるAPIパッケージを作成しているとします。そのAPIシステムに、ユーザー入力によって更新される一連の情報があるとします。メソッドを使用して、APIのユーザーにその情報を配列に直接配置させることができますarray[key]。または、カプセル化を使用することもできます。それを配列に追加するコードを取得し、APIのユーザーがこのタイプの情報を追加するために呼び出す関数(たとえば、setArray()または関数)でラップします。setWhateverMakesSense()次に、この関数でデータの問題をチェックし、特定の方法でデータを配列に編集または編集setする必要がある場合に備えて、正しい方法でデータを配列に追加できます...など。pushshiftユーザーからの入力が実際のプログラムにどのように入るかを制御します。したがって、それ自体ではセキュリティは追加されませんが、APIの作成者であるユーザーがセキュリティを作成できるようになります。これにより、内部変更を行う場合にAPIのユーザーがコードを書き直す必要がなくなるため、より適切なバージョン管理/更新が可能になります。しかし、これはとにかく良いOOPに固有のものです。

(したがって、以下のNatixのコメントに応えて...)

ここでのjavascriptとlocalStorageオブジェクトの場合、彼らはすでにこのAPIを作成しており、作成者であり、私たちがそのユーザーです。作成者が動作方法を変更することを決定したlocalStorage場合、カプセル化メソッドが使用されていれば、コードを書き直す必要が少なくなります。しかし、少なくともすぐには、このレベルの変化が起こる可能性は非常に低いことを私たちは皆知っています。そして、著者はここで行う固有の異なる安全性チェックを持っていなかったので、現在、これらの使用方法は両方ともlocalStorage本質的に同じです。シムのようなものです。ただし、既存のカプセル化を簡単に上書き/置換localStorageして、独自のセキュリティチェックを行うことができます。JavaScriptはとても素晴らしいからです。

PT

于 2012-10-26T19:22:13.313 に答える
10

それらはまったく同じだと思います。ドキュメントに記載されているのは次のとおりです。

注:値は標準のJavaScriptプロパティアクセスメソッドを使用して設定および読み取ることができますが、getItemメソッドとsetItemメソッドを使用することをお勧めします。

ただし、フルシムを使用する場合は、次のように記述されます。

メソッドlocalStorage.yourKey=yourValueの使用; そしてlocalStorage.yourKeyを削除します。キーを設定または削除することは、このコードでは安全な方法ではありません

と限られたシム:

このコードでは、キーを取得、設定、または削除するためにメソッドlocalStorage.yourKeyを使用することは許可されていません。

于 2012-10-26T19:02:59.073 に答える
6

私が目にする最大の利点の1つは、getItem()が未定義ではなくNULLを返すため、JSON.parse()を実行する前に、値が未定義かどうかを確認する必要がないことです。

于 2014-03-13T19:04:25.623 に答える
0

window.localStorage.keyのような「ドット表記」を使用しない限り、Windows Phone 7では使用できないため、おそらく問題ありません。ブラケットを使用したテストは行っていません(2番目の例)。個人的には、私は常にset関数とget関数を使用します(最初の例)。

于 2014-04-29T20:12:30.137 に答える