Javascript 如何在不事先知道密钥的情况下检索所有本地存储项?
我想显示之前编写的所有密钥和存储。 我的代码如下。我创建了一个函数(allStorage),但它不起作用。 我该怎么做Javascript 如何在不事先知道密钥的情况下检索所有本地存储项?,javascript,local-storage,Javascript,Local Storage,我想显示之前编写的所有密钥和存储。 我的代码如下。我创建了一个函数(allStorage),但它不起作用。 我该怎么做 function storeUserScribble(id) { var scribble = document.getElementById('scribble').innerHTML; localStorage.setItem('userScribble',scribble); } function getUserS
function storeUserScribble(id) {
var scribble = document.getElementById('scribble').innerHTML;
localStorage.setItem('userScribble',scribble);
}
function getUserScribble() {
if ( localStorage.getItem('userScribble')) {
var scribble = localStorage.getItem('userScribble');
}
else {
var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!';
}
document.getElementById('scribble').innerHTML = scribble;
}
function clearLocal() {
localStorage.clear();
return false;
}
function allStorage() {
var archive = [];
for (var i = 0; i<localStorage.length; i++) {
archive[i] = localStorage.getItem(localStorage.key(i));
}
}
函数storeUserScribble(id){
var scribble=document.getElementById('scribble').innerHTML;
setItem('userScribble',scribble);
}
函数getUserScribble(){
if(localStorage.getItem('userScribble')){
var scribble=localStorage.getItem('userScribble');
}
否则{
var scribble='您可以直接在这个粘性页面上涂鸦……下次您访问我的博客时,我也会记住您的留言!';
}
document.getElementById('scribble')。innerHTML=scribble;
}
函数clearLocal(){
localStorage.clear();
返回false;
}
函数allStorage(){
var归档=[];
因为(var i=0;ilocalStorage
不是一个数组,而是一个对象,所以请尝试以下操作:
for (var a in localStorage) {
console.log(a, ' = ', localStorage[a]);
}
如果您将功能修改为此,则可以基于键列出所有项目(将仅列出项目):
是对JavaScript(ECMAScript 5)的新添加。它列出了对象上所有自己的键,这比使用for in循环更快,for in循环是此操作的选项
但是,这不会显示键。为此,您需要返回一个对象,而不是数组(在我看来,这是一个无点的过程,因为这将使您与以前使用localStorage时一样,只使用另一个对象,但出于示例考虑):
如果您想要一个紧凑格式的列表,请改为这样做-在这里,数组中的每个项都将具有key=item
,稍后您可以将其拆分为两个,以此类推:
function allStorage() {
var archive = [],
keys = Object.keys(localStorage),
i = 0, key;
for (; key = keys[i]; i++) {
archive.push( key + '=' + localStorage.getItem(key));
}
return archive;
}
//迭代本地存储
for(var i=0;i
更简洁一点:
function getAllLocalStorage() {
return Object.keys(localStorage)
.reduce((obj, k) => {
return { ...obj, [k]: localStorage.getItem(k)}}, {});
}
最简单的方法是使用:
return JSON.stringify(localStorage);
ES2015+中最简单的方法是:
const items = { ...localStorage };
这些都是笨重的或完全不正确的
正确答案是:
JSON.parse(JSON.stringify(localStorage))
通过以下方式获取本地存储密钥数组:
console.log('keys: ', localStorage._keys)
通过尝试“正确答案”可能会很明显,但如果您想迭代或只搜索键名,localStorage.\u keys
是您的简单起点。Nice,不知道对象。keys
,+1正是我需要的,我试图使用array创建它,但当我将其更改为对象与我一起工作,也感谢您的描述:)length
在您的代码中拼写为lenght
。仅供参考。另请参见:这也将列出函数。@Nux它不适用于meStrange…似乎只是Firefox中的一个问题。我想您需要使用localStorage.hasOwnProperty(a)为了不列出函数这是什么巫毒?这不是遇到了hasOwnProperty问题吗?@Kzqai它只返回可枚举的属性,因此不需要额外的hasOwnProperty检查。整洁但不回答问题。你只得到一个新对象。有趣的是,这是我见过的最冗余的代码。这与编写局部变量一样torage.localStorage->{…localStorage}我看这个不起作用。你在Chrome控制台上试过这个吗?或者你可以在找到localStorage的地方共享一些文档。\u keys属性?嘿@JCrist,欢迎使用!感谢你的贡献,但你的答案不起作用。localStorage对象没有名为_keys的本机属性。
return JSON.stringify(localStorage);
const items = { ...localStorage };
for (let [key, value] of Object.entries(localStorage)) {
console.log(`${key}: ${value}`);
}
console.log('keys: ', localStorage._keys)