我在localStorage中为应用程序存储了很多值,并且需要一种将“字符串”转换回数字的方法 - 如果它是一个数字。想到如果你以后强制使用HTML <input type="number"> on your form, then the data going into the form and extracted from the form IS a number, but once stored - its converted to a string. So to repopulate that
字段,你必须读取localStorage值并在重新填充输入字段之前将其转换回一个数字 - 否则你会开始收到大量的敏感警告,有时会出现错误,因为预期会有NUMBERS ,但localStorage正在检索字符串。
我的方法:假设值是作为数字输入的,那么只会存储一个数字(仅数字) - 因此你可以假设只有数字会出现(即使它们是一个字符串)。知道只有数字会回来允许:
var allVariables = {} ;
var reg = new RegExp(/^\d+$/) ; // this accounts for digits only
for (var x=0; x<localStorage.length;x++) {
var keyValue = localStorage.getItem(localStorage.key(x)) ;
if (reg.text(keyValue)) {
keyValue = parseInt(keyValue) ;
}
allVariables[localStorage.key(x)] = keyValue ;
}
我甚至对此进行了扩展以解释真/假布尔...不能轻易使用0/1而不会与数字混淆。我看到的另一种方法是强调密钥名称以识别以后转换的类型:
即:
key1_str
key2_boo
key3_int
key4_obj
key5_flo
然后识别“_xxx”以适当地转换该值。
我要求看到其他人解决这个问题,或者就如何改进它提出建议和建议。我的并不完美......虽然当地的存储都不是......但仍在寻求改进。
答案 0 :(得分:3)
您可以考虑将整个对象存储到较少数量的存储键中,而不是存储大量的单个键,这些存储键可以在检索时串行到json并进行解析。 JSON方法将保留类型
var obj= {
id:100,
anotherProp:'foo'
}
localStorage.setItem('myObj',JSON.stringify(obj));
var newObj = JSON.parse(localStorage.getItem('myObj'));
console.log(typeof newObj.id)//number
答案 1 :(得分:1)
假设你有"keyName" : "12345"
。
棘手的解决方案是var newInt = +localStorage.getItem('keyName')
这个额外的+会将字符串转换为整数。
答案 2 :(得分:0)
尝试转换:
function getProbablyNumberFromLocalStorage(key) {
var val = localStorage.getItem(key);
return (isNan(+val) || val==null) ? val : +val;
}