26

存在しないローカルストレージアイテムを取得しようとしている場合、そのアイテムのデフォルト値を設定することは可能ですか?

たとえば、Webアプリで、さまざまなUI設定がローカルストレージに保存されているとします。ユーザーがWebサイトを離れてから戻ってくると、UIはローカルストレージから取得した値に従ってセットアップされます。これはうまくいきます。

ただし、ユーザーが初めてWebアプリにアクセスしたとき、それらのローカルストレージ値はまだ存在していません。したがって、JavaScriptがこれらのローカルストレージアイテムを取得しようとすると、それらはすべて未定義になります。ローカルストレージアイテムが存在しない場合に、各ローカルストレージアイテムのデフォルト値を指定する方法はありませんか?

キーと値のペアの保存を処理するほとんどのプログラミング言語は、デフォルト値を指定するための何らかのソート方法を提供します(.ini構成ファイルインターフェイスを考えてください)。私はこのようなものを期待していました:

var preference = localStorage.getItem('some-key', 'Default Value');

また、デフォルト値がnull /未定義かどうかをテストしてプログラムで簡単に設定し、それに応じて値を設定できることも知っていますが、これがローカルストレージのキーと値のペアのフェッチに組み込まれているかどうかを確認したいと思いました。ただそれを見ていませんでした。この機能が存在しない場合は、この機能を追加する基本的なローカルストレージラッパー関数を作成するだけです。

4

3 に答える 3

47

いいえ、そのような組み込み機能はありません。Storageインターフェイスの仕様を参照してください:

interface Storage {
  readonly attribute unsigned long length;
  DOMString? key(unsigned long index);
  getter DOMString getItem(DOMString key);
  setter creator void setItem(DOMString key, DOMString value);
  deleter void removeItem(DOMString key);
  void clear();
};

そして、それをさらに確認するための次の行:

メソッドはgetItem(key)、指定されたキーに関連付けられている現在の値を返す必要があります。指定されたキーがオブジェクトに関連付けられたリストに存在しない場合、このメソッドはnullを返す必要があります

通常のテクニックを使用できます。このようなものは問題ないはずです:

var preference = localStorage.getItem('some-key') || 'Default Value';
于 2012-12-09T20:41:20.993 に答える
10

ジェームズからの解決策:

var preference = localStorage.getItem('some-key') || 'Default Value';

空の文字列またはブール値を保存しない場合、または変数を0にすることができる場合にのみ機能します。

より長いが常に機能するソリューション:

var preference = localStorage.getItem('some-key');
if(null === preference)
{
    preference = 'Default Value';
}
于 2016-08-15T21:06:42.330 に答える
1

このメソッドはオブジェクトに使用できます

/*
Helper function that return an object from local storage or a default value
*/
function getObjectFromLocalstorage(key, default_value){
  var value = localStorage.getItem(key);
  if (value === null){
    return default_value;
  }
  return JSON.parse(value);
}

そして、ここにいくつかの出力例があります:

console.log(getObjectFromLocalstorage("some_undefined_key", {}));
>>> {}

console.log(getObjectFromLocalstorage("some_undefined_key", []));
>>> []

var value = {a: 1}; 
localStorage.setItem("defined_key", JSON.stringify(value));
getObjectFromLocalstorage("defined_key", {});
>>> {a: 1}
于 2019-02-05T09:19:58.347 に答える