プロパティへの直接アクセス(localStorage.item
またはlocalStorage['item']
)と機能インターフェイスの使用(localStorage.getItem('item')
)の両方が正常に機能します。どちらも標準であり、クロスブラウザと互換性があります。*仕様によると:
Storageオブジェクトでサポートされているプロパティ名は、オブジェクトに関連付けられたリストに現在存在する各キーと値のペアのキーであり、キーが最後にストレージ領域に追加された順序になっています。
要求された名前のキーと値のペアが見つからない場合は、動作が異なります。キーは、たとえば、'item'
存在しない、var a = localStorage.item;
もたらすa
ことundefined
ながら、var a = localStorage.getItem('item');
もたらすa
値を有しますnull
。あなたが発見したように、undefined
そしてnull
JavaScript / EcmaScriptでは互換性がありません。:)
編集:クリストフが彼の答えで指摘しているように、関数型インターフェースは、の事前定義されたプロパティに等しいキーの下で値を確実に格納および取得する唯一の方法です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での操作なしですが、Firefoxでの機能呼び出しと同義です。2番目は、に存在するキーの数を常にログに記録しますlocalStorage
。
* これは、そもそもWebストレージをサポートするブラウザに当てはまります。(これには、ほとんどすべての最新のデスクトップおよびモバイルブラウザーが含まれます。)Cookieまたはその他の手法を使用してローカルストレージをシミュレートする環境では、動作は使用されるシムによって異なります。以下のためのいくつかのpolyfillsをlocalStorage
見つけることができるここに。
getItem
そしてsetItem
、物事を行うための標準化された方法です。