使用索引
,在Chrome中将localStorage读取效果翻倍ls.getItem[i]
而不是密钥ls.getItem('key')
来源:this tweet和this 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人转发了这种用法,没有经过测试。那些事情让我很恼火。
答案 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'] );
它是否比方法更快,你必须自己测试它。
答案 5 :(得分:0)
通过索引访问不起作用(至少在Chrome中)。但是您可以使用:
localStorage.getItem(localStorage.key(0));
localStorage.key(n)返回第n个键的值,该键又传递给localStorage.getItem()。