Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将字符串从LocalStorage转换为int/float_Javascript_Variables_Local Storage - Fatal编程技术网

Javascript 如何将字符串从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

我有保存变量并将其加载到LocalStorage的函数。当我检索它们时,它们的行为就像字符串。如何简单地将这些字符串转换为int/float,以便对它们执行数学运算

我的保存和加载功能如下

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 };