正确存储localstrorage中的变量而不重置为0

时间:2017-06-22 22:48:40

标签: javascript html string variables local-storage

我试图存储一个我将在javascript中操作很多的int,但是我甚至无法正确地存储它以保持它的价值。

if (localStorage.getItem("localValue") === null || undefined ) {
    var preValue = 0;
    localStorage.setItem("localValue",preValue);
    var value = JSON.parse(localStorage.getItem("localValue"));
    console.log("newly set variable!");
}
else
{
    var value = JSON.parse(localStorage.getItem("localValue"));
    console.log("there was one here before!");
}

每次刷新页面时,它都会重置为0.但我希望它能保留前一个"会话的价值。在刷新页面之后。

2 个答案:

答案 0 :(得分:0)

附加|| undefined无效。您可以在null中使用与if的非严格比较。

不需要JSON.parse,因为您检索到的值将是数字的字符串表示形式。

您需要将您读取的值转换为数字,这可以使用一元+进行:

var value = localStorage.getItem("localValue");
if (value == null) {
    value = 0;
    localStorage.setItem("localValue", 0);
    console.log("newly set variable!");
} else {
    value = +value; // convert to number
    console.log("there was one here before!", value);
}

当您修改value时,可能通过用户输入,然后执行:

localStorage.setItem("localValue", value);

虽然您传递了一个数字,但它将存储为字符串。

关于您的gainValue功能:

function gainValue() { 
    value = value + Math.floor((Math.random() * 10) + 1);
    JSON.parse(localStorage.setItem("localValue",value));
}

JSON.parse再次无效:您不会使用结果,也不需要它。 value +表达式只有在您将value转换为数字时才能正常工作,如上所述,否则+将充当字符串连接符。

答案 1 :(得分:0)

将您的条件更改为

if (!!localStorage.getItem("localValue") ) {
    var value = JSON.parse(localStorage.getItem("localValue"));
    console.log("there was one here before!");
}
else
{
  var preValue = 0;
  localStorage.setItem("localValue",preValue);
  var value = JSON.parse(localStorage.getItem("localValue"));
  console.log("newly set variable!");
}

它将检查该值既不是null也不是undefined和false