2017-02-07 4 views
1

私はおそらく1年前に作業していましたが、このマナーで保存と読み込みの例を見つけることができません。私の問題は、これらの数値を整数として保存したり読み込んだりしているわけではありませんが、これらの数値を整数として保存/読み込むために必要なことを覚えていないか、見つけることができません。このような些細な質問には申し訳ありませんが、これは常に最適な場所です。javascriptでlocalStorageのタイプを使用すると、どこにも見つからないようです。

function saveGame() { 
      localStorage["ClickMiner.savedBefore"] = savedBefore; 
      localStorage["ClickMiner.manaRefilCost"] = manaRefilCost; 
      localStorage["ClickMiner.rocks"] = rocks; 
      localStorage["ClickMiner.miningXp"] = miningXp; 
      localStorage["ClickMiner.miningLevel"] = miningLevel; 
      localStorage["ClickMiner.pickaxes"] = pickaxes; 
      localStorage["ClickMiner.pebbleGrowers"] = pebbleGrowers; 
      //localStorage["ClickMiner.rockTier"] = rockTier; 
      localStorage["ClickMiner.rockTierCost"] = rockTierCost; 
      localStorage["ClickMiner.bankedRocks"] = bankedRocks; 
      updateTextBox("Game Saved"); 
      return true; 
    } 

    function loadGame() { 
      savedBefore = (localStorage["ClickMiner.savedBefore"]); 
      manaRefilCost = (localStorage["ClickMiner.manaRefilCost"]); 
      rocks = (localStorage["ClickMiner.rocks"]); 
      miningXp = (localStorage["ClickMiner.miningXp"]); 
      miningLevel = (localStorage["ClickMiner.miningLevel"]); 
      pickaxes = (localStorage["ClickMiner.pickaxes"]); 
      pebbleGrowers = (localStorage["ClickMiner.pebbleGrowers"]); 
      //rockTier = (localStorage["ClickMiner.rockTier"]); 
      rockTierCost = (localStorage["ClickMiner.rockTierCost"]); 
      bankedRocks = (localStorage["ClickMiner.bankedRocks"]); 
      updateTextBox("Game Loaded"); 
      return true; 
    } 

    function newGame() { 
     savedBefore = 1; 
     localStorage["ClickMiner.savedBefore"] = savedBefore; 
     localStorage["ClickMiner.manaRefilCost"] = manaRefilCost; 
     localStorage["ClickMiner.rocks"] = rocks; 
     localStorage["ClickMiner.miningXp"] = miningXp; 
     localStorage["ClickMiner.miningLevel"] = miningLevel; 
     localStorage["ClickMiner.pickaxes"] = pickaxes; 
     localStorage["ClickMiner.pebbleGrowers"] = pebbleGrowers; 
     //localStorage["ClickMiner.rockTier"] = rockTier; 
     localStorage["ClickMiner.rockTierCost"] = rockTierCost; 
     localStorage["ClickMiner.bankedRocks"] = bankedRocks; 
     location.reload(); 
     updateTextBox("New Game Started."); 
     return true; 
    } 
+0

可能な複製[JavascriptオブジェクトのようにlocalStorageに整数値を格納して、型キャストなしでそれを抽出することはできますか?](http://stackoverflow.com/questions/33952287/is-it-ストア可能整数値のローカルストレージのようなJavaScriptオブジェクト) – Justin

答えて

1

Localstorageは文字列でのみ機能します。

parseInt(variable) 

はあなたの事が整数になりたい場合は仕事に

1

を行う必要があり、あなたがする必要があるのはparseInt機能を使用しています。 localStorageに格納されているものはすべて文字列なので、loadGame()で整数変換を行います。このよう

parseInt(aThing, 10)

function loadGame() { 
    savedBefore = parseInt(window.localStorage["ClickMiner.savedBefore"], 10); 
    // and so on... 

} 

10あなたはbase10整数(0-9)とないバイナリ、六角または他の番号システムをしたいという意味、基数です。

0

データを保存するための記憶域を整数として押すのではなく、自分のデータ型が整数かどうかを確認することをお勧めします。予想されるタイプのデータであれば、書き込み操作と読み取り操作の間にJSON.stringifyJSON.parseを使用します。 localStorageは文字列値のみを受け入れるためです。つまり、値として数値を指定すると、文字列に変換されます。したがって、localStorageの出力タイプはstringになります。

上記をすべて考慮することで、コードの多くの変更を避けることで、あなたの期待に応えるための素早いスニペットがあります。

const localStorageProxy = new Proxy(localStorage, { 
 
    get(target, prop){ 
 
    if(target.hasOwnProperty(prop) && typeof target[prop] === "function"){ 
 
     return target[prop]; 
 
    } 
 
    return JSON.parse(target.getItem(prop)||"null"); 
 
    }, 
 
    set(target, prop, value){ 
 
    target.setItem(prop, JSON.stringify(value)); 
 
    } 
 
}); 
 

 
// testing 
 

 
console.log(localStorageProxy["testNumber"]); 
 

 
localStorageProxy["testNumber"] = 123; 
 

 
console.log(localStorageProxy["testNumber"], typeof localStorageProxy["testNumber"]);

PS:上記のスニペットは、セキュリティの制限のため、正しく動作しない場合があります。 ここにフィドルですlink

関連する問題