我遇到一个问题,其中从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函数现在将变量视为字符串,而收缩函数保持不变。
答案 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您的值。然后根据该值完成任务。
这将解决您的代码中任何不需要的行为。
类型铸造!非常有用。