2

ls.getItem[i]使用索引而不是键使 Chrome 中的 localStorage 读取性能翻倍ls.getItem('key')

资料来源:这篇推文和一些人写的一些很棒的 JavaSciript 库的演讲(幻灯片 19)。我想这些人知道他们在说什么,所以我想知道为什么这对我不起作用:

localStorage.setItem(0, 'Hello world');
localStorage.getItem(0); // 'Hello World' – Works as expected
localStorage.getItem[0]; // undefined

我是不是误会了什么?根据那次谈话,最后一个方法调用应该返回'Hello world'not undefined

他们也链接到这个 JS Bin,但是当通过索引读取值时,我仍然得到undefined.

编辑:我知道如何使用 localStorage 正确读取索引,我在询问getItem索引。似乎谈话只是暗示了错误的用法?另外,我想知道为什么 32 人在没有测试的情况下转发了该用法。这些事情让我很生气。

4

6 回答 6

5

我的名字是克里斯,我是造成混乱的幻灯片的负责人。对于造成的混乱,我深表歉意。幻灯片有点开玩笑。让我解释一下。。

在我们小组讨论之前的几天里,发布并转发了一条推文,内容是关于将 localStorage 的读取性能提高一倍。推文是您引用的推文(Twitter)。然而,当我看到这条推文时,我做了一个双重考虑,因为语法对我来说看起来非常错误。我测试语法只是为了发现与您所做的相同的事情:如果您尝试访问 localStorage 中的值,此语法显然无效。

在 SXSW 的舞台上,这个神话被当作一个笑话来呈现。是的,通过在 localStorage.getItem 上引用数字索引,您可以获得双倍的性能。但是,所有值都未定义。

无论如何,似乎为了消除错误信息的传播,我设法进一步传播了它。感谢您提请我们注意这个问题!

于 2012-05-23T07:03:07.090 回答
3

通过索引访问不起作用(至少在 Chrome 中)。但是你可以使用:

localStorage.getItem(localStorage.key(0));

localStorage.key(n) 返回第 n 个键的值,然后将其传递给 localStorage.getItem()。

于 2018-10-05T18:40:28.727 回答
1
localStorage.getItem();

是一个函数,因此您不能使用数组表示法访问它,而是可以使用:

localStorage.setItem(0, 'foo');
localStorage[0]; // 'foo'

如果您使用字符串键,您可以这样做:

localStorage.setItem('foo', 'bar');
localStorage.foo // 'bar'
于 2012-05-21T16:51:38.543 回答
0

我认为应该只是:

localStorage[0]

这当然适用于最新版本的 Chrome。

于 2012-05-21T16:34:24.827 回答
0

我不明白这是如何工作的:

localStorage.getItem[0];

getItem是一种方法,不能像那样访问。

不过,可以直接通过密钥访问 localStorage。可以这样做:

console.log( localStorage[0] );
console.log( localStorage['test'] );

无论它是否比方法更快,您都必须自己测试它。

jsFiddle 在这里

于 2012-05-21T16:34:54.540 回答
0

你就是不能那样做。获取项目的两种正确方法是通过getItem或直接通过索引localStorage;不是通过获得getItem.

文档中没有任何内容提及此功能,并且它不适用于我尝试过的任何浏览器,所以我不确定他们从哪里得到它。也许这太令人兴奋了,它提高了性能,以至于他们没有费心去检查它是否有效?

于 2012-05-21T16:32:51.057 回答