[英]Using a type of localStorage in javascript that I can't seem to find anywhere
So I have a save and load function I was working on probably a year ago and cannot find example of saving and loading in this manor. 因此,我大概一年前就有一个保存和加载功能,找不到在此庄园中保存和加载的示例。 My issue is that I'm not saving and loading these numbers as integers but I can't remember or find what I need to do to make these numbers save/load as integers.
我的问题是我没有将这些数字保存并加载为整数,但是我不记得或找不到使这些数字保存/加载为整数的方法。 Sorry for such a trivial question but this is always a great place to go.
很抱歉遇到这样一个琐碎的问题,但这始终是一个不错的选择。
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;
}
Localstorage works only with strings. Localstorage仅适用于字符串。
parseInt(variable)
Should do the job 应该做的工作
If you want a thing to be an integer, all you need to do is use the parseInt
function. 如果您想让某个东西成为整数,则只需使用
parseInt
函数即可。 Everything stored in localStorage is a string, so you would do the integer conversion in loadGame()
. 存储在localStorage中的所有内容都是一个字符串,因此您将在
loadGame()
进行整数转换。
Like this: 像这样:
function loadGame() {
savedBefore = parseInt(window.localStorage["ClickMiner.savedBefore"], 10);
// and so on...
}
The 10
of parseInt(aThing, 10)
is the radix, meaning you want base10 integers (0-9) and not binary, hex or some other number system. 在
10
的parseInt(aThing, 10)
为基数,这意味着你要base10整数(0-9),而不是二进制,十六进制或一些其他数字系统。
Instead of pushing the storage for saving data as integer, I would prefer to ensure if my data type is integer. 我宁愿确保我的数据类型是否为整数,而不是推送用于将数据保存为整数的存储器。 If I am pretty sure if my data in expected type then, I would use
JSON.stringify
and JSON.parse
to between write and read operations. 如果我很确定自己的数据是否为预期类型,则可以在写入和读取操作之间使用
JSON.stringify
和JSON.parse
。 Because localStorage
will accept only string value. 因为
localStorage
只接受字符串值。 That mean, if you give a number as value it will be converted to string. 这意味着,如果您提供数字作为值,它将被转换为字符串。 So, the output type from localStorage will be string.
因此,localStorage的输出类型将为字符串。
By considering all of above, here is a quick snippet to achive your expectations by avoiding many changes on your code. 考虑了以上所有内容后,这里有一个简短的摘要,可以避免对代码进行很多更改来达到您的期望。
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: The snippet above may not work correctly because of security restrictions. PS:由于安全限制,上面的代码段可能无法正常工作。 Here is the fiddle link
这是小提琴链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.