localStorage 派生变量在最初减去时充当整数,但在最初添加时充当字符串

localStorage derived variable acts as integer when initally subtracting, but string when initally adding

我遇到一个问题,从 LocalStorage 检索到的整数变量会根据首先对其执行的操作而出现异常。

如果执行的第一个运算是减法,则变量将作为整数。任何进一步的操作 运行 照常进行。

但是,如果执行的第一个操作是加法,它会将变量视为字符串。任何进一步的添加也将把它视为一个字符串,直到执行第一次减法操作。

这是有问题的代码(请原谅我的所有警告):

<script type="text/javascript">
    var line = 125;

    if (localStorage.getItem("gtLine") !== null) {
        line = localStorage.getItem("gtLine");
    }
    function shrink() {
        alert(line);

        line -= 10;

        alert(line);
        localStorage.setItem("gtLine", line);
    }
    function grow() {
        alert(line);

        line += 10;

        alert(line);
        localStorage.setItem("gtLine", line);
    }
    function reset() {
        line = 125;
        localStorage.setItem("gtLine", line);
        alert(line);
    }
</script>

<button onClick="javascript:shrink();">Shrink</button> 
<button onClick="javascript:grow();">Grow</button> 
<button onClick="javascript:reset();">reset</button> 

以及重现问题的步骤:

首先,按您认为合适的任何顺序按下缩小和放大按钮,以查看脚本是否正常运行。

然后,刷新页面,使其从 localStorage 重新加载变量,按缩小按钮,然后按缩小和扩大按钮,看到它们仍然有效。

现在,再次刷新,但这次先按下增长按钮。 grow 函数现在将变量视为字符串,而 shrink 函数保持不变。

此函数'localStorage.getItem'默认return值为'String'。这就是为什么它在使用“+”时进行串联的原因。 但是,在执行 '-' 时,它是 int 类型转换,因为没有 String.

的操作

你面对的是因为 javascript 直接进行类型转换,因为它不是强类型语言。

'a' + 10 = a10
'11' + 10 = 110
'a'  - 10 = NaN
'11' - 10  = 1

因为 1)+号用于数字的加法和拼接。 2) localStorage 始终将数据存储为字符串。 因此,从 localStorage 获取数据后,您首先键入 Cast your value。然后根据该值执行任务。

这将解决您的代码中任何不需要的行为。

类型铸造 !!!很有用。