6

HTML5でローカルストレージのテストに取り組んでいました。多くのWebエンジンがメソッドを異なる方法で処理しているように見えるため、Safari6.0.2を使用したことに注意してください。

私がこれを行う場合:

localStorage.setItem('subTotal', Number(12345)); // I know, it's redundant :)
var varType = typeof localStorage.getItem('subTotal');

alert(varType);

あなたは今考えるでしょう。それは数です!。しかし、そうではありません。型キャストを使用しても、HTML5ローカルストレージは、挿入時にすべての変数型を文字列に変換するようです。開発ツールを使用すると、引用符の間に文字列値が表示されますが、数値は表示されないため、おかしいです。引用符を取り除くのはインスペクターペインかもしれません。

私はすでにjQueryに古い自動typeCasting関数を持っていますが、0とfalseはまだ混乱する可能性があるため、これらのケースには常にうんざりしています。

localStorage。*ライブラリに変数タイプを維持するための設定があるかどうかは誰でも知っていますか?

4

4 に答える 4

14

最初にそれらをJSONに変換する必要があります。

localStorage.setItem( 'subTotal', JSON.stringify(12345) );

次に、アイテムを取得するときに、JSONを解析します。

JSON.parse( localStorage.getItem('subTotal') );

これがフィドルです:http://jsfiddle.net/hD9dF/


使いやすくするために、独自のラッパーを作成します。

var myLocalStorage = {
    set: function (item, value) {
        localStorage.setItem( item, JSON.stringify(value) );
    },
    get: function (item) {
        return JSON.parse( localStorage.getItem(item) );
    }
};

これがフィドルです:http://jsfiddle.net/hD9dF/1/

于 2012-11-18T17:52:54.257 に答える
4

ローカルストレージはすべてを文字列に変換します(すべてをテキストとして保存するため)。あなたの生活を楽にし、少なくとも数/ブール/オブジェクトの構造、そして出入りするすべてのものを保存JSON.stringifyするJSON.parseため。

そして、その提案のパフォーマンスを向上させるには、「コンセプト」ごとに1つのlocalStorage変数(マップウィジェットのすべてのデータやすべてのユーザー設定など)のみを使用し、JSオブジェクトを作成してJSON文字列に変換します。その1つの変数に保存します(必要な場合)。

于 2012-11-18T17:57:43.940 に答える
0

あなたがしたいことはlocalDataStorageで簡単です。そこでは、次の「タイプ」のいずれかを透過的に設定/取得できます:配列、ブール、日付、浮動小数点、整数、ヌル、オブジェクト、または文字列。

[免責事項]私はユーティリティの作者です[/免責事項]

例:

localDataStorage.set( 'key1', 'Belgian' );
localDataStorage.set( 'key2', 1200.0047 );
localDataStorage.set( 'key3', true );
localDataStorage.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } );
localDataStorage.set( 'key5', null );

localDataStorage.get( 'key1' );   -->   'Belgian'
localDataStorage.get( 'key2' );   -->   1200.0047
localDataStorage.get( 'key3' );   -->   true
localDataStorage.get( 'key4' );   -->   Object {RSK: Array(5)}
localDataStorage.get( 'key5' );   -->   null

すべての変換作業はバックグラウンドで実行されます。設定して取得するだけです。

于 2017-11-08T19:57:01.970 に答える
0

例:

let id = JSON.parse(<any>localStorage.getItem("id"))
    
if (typeof id != "number") {
// rest of code
于 2021-05-10T10:01:03.480 に答える