localStorage派生变量在初始减去时充当整数,但在初始添加

时间:2016-12-15 05:57:53

标签: javascript html5 local-storage

我遇到一个问题,其中从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函数现在将变量视为字符串,而收缩函数保持不变。

2 个答案:

答案 0 :(得分:3)

此函数'localStorage.getItem'默认返回值为'String'。这就是为什么它在使用'+'时进行连接。 但是,在执行' - '时,它是int类型转换,因为没有String的操作。

您正面临因为javascript直接进行类型转换,因为它不是强类型语言。

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

答案 1 :(得分:0)

由于 1)+符号用于数字加法和连接。 2)localStorage始终将数据存储为字符串。 因此,在从localStorage获取数据后,首先输入Cast您的值。然后根据该值完成任务。

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

类型铸造!非常有用。