通过索引读取localStorage值

时间:2012-05-21 16:28:16

标签: javascript local-storage sessionstorage

  

使用索引ls.getItem[i]而不是密钥ls.getItem('key')

,在Chrome中将localStorage读取效果翻倍

来源:this tweetthis talk(幻灯片19)由一些编写了几个非常棒的JavaSciript库的人提供。我想这些人都知道他们在谈论什么,所以我想知道为什么这对我不起作用:

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

我误解了什么吗?根据该演讲,最后一个方法调用应该返回'Hello world'而不是undefined

他们也与this JS Bin相关联,但在通过索引读取值时,我仍然得到undefined

编辑:我知道如何使用localStorage正确读取索引,我问的是getItem索引。似乎谈话只是暗示错误的用法?此外,我想知道为什么32人转发了这种用法,没有经过测试。那些事情让我很恼火。

6 个答案:

答案 0 :(得分:4)

我的名字是克里斯,我是负责导致混淆的幻灯片的人。对于困惑,我道歉。幻灯片有点儿开玩笑;请允许我解释..

在我们小组讨论的前几天,发布了一条推文,转发了关于localStorage读取性能翻倍的推文。推文是您引用的推文(Twitter)。但是,当我看到这条推文时,我做了双重考虑因为语法看起来非常错误。我测试了语法只是为了发现你做的同样的事情:如果你试图访问localStorage中的值,这个语法显然是无效的。

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

无论如何,似乎在试图消除错误信息传播的过程中,我设法进一步扩展它。感谢您将此问题引起我们的注意!

答案 1 :(得分:1)

localStorage.getItem();

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

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

如果使用字符串键,则可以执行此操作:

localStorage.setItem('foo', 'bar');
localStorage.foo // 'bar'

答案 2 :(得分:0)

你不能那样做。获取项目的两种正确方法是getItem或直接在localStorage上的索引;获取getItem的财产。

the documentation中没有任何内容提及此功能,并且它在我尝试过的任何浏览器上都不起作用,因此我不确定它们从何处获取。也许它是如此令人兴奋,它提高了性能,他们没有费心去检查它是否有效?

答案 3 :(得分:0)

我认为应该只是:

localStorage[0]

这肯定适用于最新版本的Chrome。

答案 4 :(得分:0)

我看不出这是如何起作用的:

localStorage.getItem[0];

getItem是一种方法,无法像这样访问。

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

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

它是否比方法更快,你必须自己测试它。

jsFiddle here

答案 5 :(得分:0)

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

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

localStorage.key(n)返回第n个键的值,该键又传递给localStorage.getItem()。