[解決済み] localStorage.itemやlocalStorage['item']よりもlocalStorage.getItem('item')の方がいいのか?
質問
最近、私は
について質問しました。
. 使用方法
JSON.parse(localStorage.item)
と
JSON.parse(localStorage['item'])
を返すように動作していませんでした。
NULL
を返すように動作していませんでした。
しかし
JSON.parse(localStorage.getItem('item')
は機能しました。そして、それは判明しました。
JSON.parse(localStorage.testObject || null)
も動作することがわかりました。
コメントの一つ
は、基本的に次のように述べています。
localStorage.getItem()
と
localStorage.setItem()
が常に優先されるべきです。
ゲッターとセッターは、一貫性があり、標準化されており、かつ クロスブラウザ互換のLS APIを使用する方法を提供します。 他の方法よりも優先されるべきです。- クリストフ
私は localStorage のためにドットやブラケットの省略記法を使うのが好きになってきました。 localStorage.item や localStorage['item'] よりも localStorage.getItem('item') の方がいいのでしょうか、それとも、それらが動作する限りは、省略記法でもいいのでしょうか?
どのように解決するのですか?
プロパティへの直接アクセス(
localStorage.item
または
localStorage['item']
) を使用し、機能インターフェイス (
localStorage.getItem('item')
) を使っても問題ありません。どちらも標準的で、クロスブラウザに対応しています。
*
によれば
仕様書
:
Storageオブジェクトでサポートされているプロパティ名は、オブジェクトに関連付けられたリストに現在存在する各キー/値のペアのキーで、キーが最後にストレージ領域に追加された順番になります。
要求された名前のkey/valueペアが見つからない場合、それらはただ異なる動作をします。例えば、もしキー
'item'
が存在しない場合
var a = localStorage.item;
は結果として
a
である
undefined
でありながら
var a = localStorage.getItem('item');
は結果的に
a
という値を持つ
null
. あなたが発見したように
undefined
と
null
は JavaScript/EcmaScript では互換性がありません。)
EDITです。
でChristophが指摘しているように
彼の回答
の定義済みプロパティに等しいキーの値を確実に保存・取得する唯一の方法は、関数型インターフェースです。
localStorage
. (これらは6つあります。
length
,
key
,
setItem
,
getItem
,
removeItem
そして
clear
.) ですから、例えば次のようにすれば必ずうまくいきます。
localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));
特に、最初のステートメントがプロパティである
localStorage.length
のプロパティに影響を与えません (ただし、キー
'length'
にすでに
localStorage
). この点で、この仕様は内部的に矛盾しているように見えます。
しかし、以下はおそらくあなたが望むことはできないでしょう。
localStorage.length = 2;
console.log(localStorage.length);
興味深いことに、1つ目はChromeではno-opですが、Firefoxではfunctional callと同義です。2つ目は、常に
localStorage
.
*
これは、そもそもウェブ ストレージをサポートするブラウザに当てはまります。(これは、最近のデスクトップおよびモバイルブラウザのほとんどすべてを含みます。) クッキーまたは他の技術を使用してローカルストレージをシミュレートする環境では、動作は使用するシムに依存します。のポリフィルがいくつかあります。
localStorage
に対するポリフィルがいくつかあります。
はこちら
.
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] 配列の最後の項目を取得する
-
[解決済み] javascriptでlocalStorageをクリアする?
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] localStorageの値の最大サイズは?
-
[解決済み] ブラウザウィンドウ/タブを閉じたときに、localStorageの項目を削除するには?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] 無効になっている入力フィールドの値を送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行