我只是想知道如何在中获取所有关键值localStorage
。
我试图用一个简单的JavaScript循环来检索值
for (var i=1; i <= localStorage.length; i++) {
alert(localStorage.getItem(i))
}
但是仅当键是从1开始的渐进数字时,它才有效。
如何显示所有键,以显示所有可用数据?
我只是想知道如何在中获取所有关键值localStorage
。
我试图用一个简单的JavaScript循环来检索值
for (var i=1; i <= localStorage.length; i++) {
alert(localStorage.getItem(i))
}
但是仅当键是从1开始的渐进数字时,它才有效。
如何显示所有键,以显示所有可用数据?
Answers:
for (var key in localStorage){
console.log(key)
}
编辑:这个答案越来越多,所以我想这是一个普遍的问题。我觉得我应该归功于任何可能迷失我答案的人,并认为这是“正确的”,只是因为它被接受进行更新。事实是,上面的示例并不是执行此操作的正确方法。最好和最安全的方法是这样做:
for ( var i = 0, len = localStorage.length; i < len; ++i ) {
console.log( localStorage.getItem( localStorage.key( i ) ) );
}
localStorage.length
而不直接使用它?2)为什么在for循环中声明它?3)为什么++i
优先于i++
?
++i
绝对不会使循环从处开始i = 1
。每次迭代后都会对括号内的第三个表达式求值。i++
并++i
都对完全相同的效果i
。不同之处在于,++i
对递增后的新值求值i
,而i++
对递增i
前的值求值。这里绝对没有区别,因为我们关心的只是增加的副作用i
,而不是表达式的值。
Object.keys(localStorage)
,只要您不需要支持IE <9,就可以很好地解决此问题
localStorage.key( i )
零件来完成。
我喜欢这样创建一个容易看到的对象。
Object.keys(localStorage).reduce(function(obj, str) {
obj[str] = localStorage.getItem(str);
return obj
}, {});
我也用cookie做类似的事情。
document.cookie.split(';').reduce(function(obj, str){
var s = str.split('=');
obj[s[0].trim()] = s[1];
return obj;
}, {});
您可以使用该localStorage.key(index)
函数返回字符串表示形式,其中index
您要检索的第n个对象。
这将在localStorage上打印所有键和值:
ES6:
for (let i=0; i< localStorage.length; i++) {
let key = localStorage.key(i);
let value = localStorage[key];
console.log(`localStorage ${key}: ${value}`);
}
我同意凯文(Kevin)的最佳答案,但是有时当您在本地存储中具有相同值的不同密钥时,例如,您希望公共用户查看他们将项目添加到购物篮中的次数,则需要向他们显示次数也可以使用以下命令:
var set = localStorage.setItem('key', 'value');
var element = document.getElementById('tagId');
for ( var i = 0, len = localStorage.length; i < len; ++i ) {
element.innerHTML = localStorage.getItem(localStorage.key(i)) + localStorage.key(i).length;
}
对于那些使用Object.keys(localStorage)
...的人,不要因为它在Firefox中不起作用(具有讽刺意味的是,因为Firefox忠于规范)。考虑一下:
localStorage.setItem("key", "value1")
localStorage.setItem("key2", "value2")
localStorage.setItem("getItem", "value3")
localStorage.setItem("setItem", "value4")
因为key,getItem和setItem是原型方法,所以Object.keys(localStorage)
只会返回["key2"]
。
您最好执行以下操作:
let t = [];
for (let i = 0; i < localStorage.length; i++) {
t.push(localStorage.key(i));
}
object.keys()
……我将更新我的回答以反映这一点。
[Exposed=Window]
。这导致了我描述的行为。如果指定[Exposed=Window,OverrideBuiltins]
它,它将提供我们期望的行为,但规范未指定OverrideBuiltins
。您可以在whatwg / html中查看有关此内容的讨论:github.com/whatwg/html/issues/183
我们也可以按名称阅读。
假设我们这样保存了名为“用户”的值
localStorage.setItem('user', user_Detail);
然后我们可以通过使用
localStorage.getItem('user');
我用它,它工作顺利,不需要做for循环