Javascript 如何将字符串从LocalStorage转换为int/float
我有保存变量并将其加载到LocalStorage的函数。当我检索它们时,它们的行为就像字符串。如何简单地将这些字符串转换为int/float,以便对它们执行数学运算 我的保存和加载功能如下Javascript 如何将字符串从LocalStorage转换为int/float,javascript,variables,local-storage,Javascript,Variables,Local Storage,我有保存变量并将其加载到LocalStorage的函数。当我检索它们时,它们的行为就像字符串。如何简单地将这些字符串转换为int/float,以便对它们执行数学运算 我的保存和加载功能如下 function saveVars() { localStorage.setItem('moneyAdd', moneyAdd); localStorage.setItem('money', money); localStorage.setItem('crystals', crysta
function saveVars() {
localStorage.setItem('moneyAdd', moneyAdd);
localStorage.setItem('money', money);
localStorage.setItem('crystals', crystals);
localStorage.setItem('wood', rsword);
localStorage.setItem('metal', metal);
localStorage.setItem('sword', sword);
localStorage.setItem('rsword', rsword);
localStorage.setItem('hasAnvil', hasAnvil);
}
function loadVars() {
moneyAdd = localStorage.getItem('moneyAdd');
money = localStorage.getItem('money');
crystals = localStorage.getItem('crystals');
wood = localStorage.getItem('wood');
metal = localStorage.getItem('metal');
sword = localStorage.getItem('sword');
rsword = localStorage.getItem('rsword');
hasAnvil = localStorage.getItem('hasAnvil');
}
在处理字符串时,localStorage将始终返回字符串,因此“1”+1将是11。您需要将字符串转换为数字、布尔值等 可能在
loadVars()
中有更改,例如:
function loadVars() {
moneyAdd = +localStorage.getItem('moneyAdd');
money = +localStorage.getItem('money');
crystals = +localStorage.getItem('crystals');
wood = +localStorage.getItem('wood');
metal = +localStorage.getItem('metal');
sword = +localStorage.getItem('sword');
rsword = +localStorage.getItem('rsword');
hasAnvil = localStorage.getItem('hasAnvil') === 'true'
}
保存到localStorage的所有内容都将变成字符串值 LocalStorage是
夫妇的键值存储
因此,在加载时必须将字符串值转换为数字
尝试(针对所有变量):
在存储数据之前使用
JSON.stringify
,在从存储中取回数据之后使用JSON.parse
怎么样。它“保留”类型。不需要单独处理数据的正确类型转换过程。我还建议对一个游戏/玩家的所有数据使用一个存储对象
设置/获取一个数据对象的存储键可以是游戏名称和玩家个人用户名/id的组合。。。像
localStorage.setItem('adventure-x-charlie', JSON.stringify(data));
。。。在数据
看起来像这样的情况下
const data = { moneyAdd: 1, money: 1000, crystals: 0, wood: 0, metal: 0, sword: 0, rsword: 0, hasAnvil: false };
OP的重构示例代码可能会证明刚才所说的(不幸的是,localStorage
不适用于沙盒“SO-code-box”,但是…)。将以下代码粘贴到开发人员工具的控制台也可以完成它的工作
const RolePlay=(函数(){
//本地模块功能
//…处理会话数据
常量defaultSessionData={
//利润值:1
加:1,,
货币:1000,
水晶:0,
伍德:0,
金属:0,
剑:0,
字:0,,
哈桑维尔:错
};
函数resetSessionData(数据){
返回Object.assign(数据,defaultSessionData);
}
函数getInitialSessionData(sessionId){
返回(
parse(localStorage.getItem(sessionId))
||resetSessionData({})
);
}
函数persistSessionData(sessionId,数据){
返回localStorage.setItem(sessionId,JSON.stringify(data));
}
//本地模块功能
//…处理会话数据显示
函数displayCrystalCount(数据){
警报(`您拥有${data.crystal}crystal.`);
}
函数displayMetalCount(数据){
警报(`You have${data.metal}metal.`);
}
函数displayWoodCount(数据){
警报(`您有${data.wood}wood.`);
}
功能显示节省(数据){
警惕(`你有${data.money}美元。`);
}
功能显示库存(数据){
警觉的(`\
这是您的清单:\n\
${data.money}美元\n\
${data.crystal}晶体\n\
${data.wood}wood(s)\n\
${data.metal}金属\n\
${data.swill}剑\n\
具有anvil(${data.hasAnvil})\n\
${data.rsword}\
`);
}
//本地模块功能
//…处理会话数据的状态更改
函数增量InventoryCount(数据、键、值){
数据[键]=(数据[键]+(值| | 1));
}
函数递减ventorycount(数据、键、值){
数据[键]=(数据[键]-(值| | 1));
}
函数craftsbasicsword(数据){
const isconfirm=确认(`\
你确定要买一把基本的剑吗\
两种金属、一种木材和一种晶体\
`);
如果(未确认){
如果(
data.crystal>=1
&&data.wood>=1
&&data.metal>=2
) {
递减存货计数(数据“金属”,2);
递减ventorycount(数据“wood”);
递减ventorycount(数据“晶体”);
递增库存计数(数据“剑”);
警觉的(`\
交易已完成。您现在有\
${data.swill}基本剑\
`);
}否则{
警报(“资金不足。交易已取消”);
}
}否则{
警报(“交易已取消”);
}
}
功能增强字(数据){
const isconfirm=确认(`\
你确定要打造一把强化剑吗\
用一把基本剑和两个铁砧金属\
`);
如果(未确认){
如果(
data.hasAnvil
&&数据量>=1
&&data.metal>=2
) {
递减ventorycount(数据“剑”);
递减存货计数(数据“金属”,2);
递增库存计数(数据'rsword');
警觉的(`\
交易已完成。您现在有\
${data.rsword}\
`);
}否则{
警报(“资金不足。交易已取消”);
}
}否则{
警报(“交易已取消”);
}
}
功能铁砧(数据){
const isconfirm=确认(`\
你确定你要手工制作吗\
一个铁砧,4种金属\
`);
如果(未确认){
如果(data.metal>=4){
递减存货计数(数据“金属”,4);
data.hasAnvil=true;
警觉的(`\
交易已完成。您现在有\
铁砧(${data.hasAnvil})\
`);
}否则{
警报(“资金不足。交易已取消”);
}
}否则{
警报(“交易已取消”);
}
}
函数SellBasicWord(数据){
const isconfirm=确认(`\
你确定要卖吗\
一把基本的剑和150美元\
`);
如果(未确认){
如果(数据量>=1){
递增库存计数(数据“货币”,150);
递减ventorycount(数据“剑”);
警觉的(`\
交易完成。您刚刚售出一把基本剑\
您现在有${data.swook}个基本剑\
总共${data.money}美元\
`);
}否则{
警报(“资金不足。交易已取消”);
}
}否则{
A.
const data = { moneyAdd: 1, money: 1000, crystals: 0, wood: 0, metal: 0, sword: 0, rsword: 0, hasAnvil: false };