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。然后根据该值执行任务。
这将解决您的代码中任何不需要的行为。
类型铸造 !!!很有用。
我遇到一个问题,从 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。然后根据该值执行任务。
这将解决您的代码中任何不需要的行为。
类型铸造 !!!很有用。