localstorage在localstorage [key] + = 1上返回11

时间:2014-05-20 14:25:45

标签: javascript numbers local-storage

使用下面的代码,如果没有定义,我使用quote = 1的键创建一个localstorage变量。但是,当最终使用相同的引用键再次调用它时,即使使用Number()函数,它也会变为11而不是2。

if (typeof localStorage[quote] == "undefined") {
    localStorage[quote] = Number(1);
} else {
    localStorage[quote] += Number(1);
}

alert(localStorage[quote]);

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

听起来好像正在成为" 11"不是11.在检索周围包装parseInt()或Number():

localStorage[quote] = Number(localStorage[quote]) + 1;

以下评论编辑。

来自MDN(强调我的):

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

  

描述DOM存储机制是字符串的一种方式   密钥/值对可以安全地存储,然后检索以供使用

答案 1 :(得分:3)

因为localStorage按字符串存储。 typeof window.localStorage.getItem(quote); //" string&#34 ;;

所以" 1" + 1 =" 11"。

如果您想存储号码,则需要转换为数字。

希望它能帮助

答案 2 :(得分:2)

+是数字的运算符(添加两个数字)以及字符串的连接运算符(将字符串2连接到字符串1),具体取决于操作数的类型

在您的情况下,localStorage [key]将始终返回一个字符串,因此将使用连接运算符。并"1" + 1 == "11"

因此,您应该在使用+运算符之前将检索到的值转换为int

localStorage[quote] = parseInt(localStorage[quote], 10) + 1;