プロパティへの直接アクセス(localStorage.itemまたはlocalStorage['item'])と機能インターフェイスの使用(localStorage.getItem('item'))の両方が正常に機能します。どちらも標準であり、クロスブラウザと互換性があります。*仕様によると:
Storageオブジェクトでサポートされているプロパティ名は、オブジェクトに関連付けられたリストに現在存在する各キーと値のペアのキーであり、キーが最後にストレージ領域に追加された順序になっています。
要求された名前のキーと値のペアが見つからない場合は、動作が異なります。キーは、たとえば、'item'存在しない、var a = localStorage.item;もたらすaことundefinedながら、var a = localStorage.getItem('item');もたらすa値を有しますnull。あなたが発見したように、undefinedそしてnullJavaScript / 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、物事を行うための標準化された方法です。