当前位置: 首页 > 面试题库 >

localStorage.getItem('item')是否优于localStorage.item或localStorage ['item']?

蓬威
2023-03-14
问题内容

在尚未设置商品时,使用JSON.parse(localStorage.item)JSON.parse(localStorage['item'])无法返回NULL

但是,JSON.parse(localStorage.getItem('item')确实可行。事实证明,这JSON.parse(localStorage.testObject || null)也是可行的。

一位评论基本上说,localStorage.getItem()localStorage.setItem()应始终优先考虑:

getter和setter提供了一致,标准化和跨浏览器兼容的方式来使用LS api,并且始终应优先于其他方式。

我喜欢对localStorage使用速记点和方括号表示法,但是我很好奇知道其他人对此的看法。localStorage.getItem(’item’)是否比localStorage.item或localStorage更好,或者只要它们可以使用速记符号就可以吗?


问题答案:

直接属性访问(localStorage.itemlocalStorage['item'])和使用功能接口(localStorage.getItem('item'))都可以正常工作。两者都是标准的和跨浏览器兼容的。

存储对象上受支持的属性名称是与该对象相关联的列表中当前存在的每个键/值对的键,按照键最后一次添加到存储区域的顺序。

当找不到带有所请求名称的键/值对时,它们的行为就不同。例如,如果key 'item'不存在,var a = localStorage.item;将导致a存在undefined,而var a =localStorage.getItem('item');将导致a具有value
null。如您所知,undefined并且null在JavaScript / EcmaScript中不可互换。:)

编辑:
功能接口是可靠地存储和检索等于的预定义属性的键下的值的唯一方法localStorage。(有这六个:lengthkeysetItemgetItemremoveItem,和clear。)所以,举例来说,下面将始终工作:

localStorage.setItem('length', 2);
console.log(localStorage.getItem('length'));

请特别注意,第一个语句不会影响物业localStorage.length(如果没有按键,除了可能增加它'length'已经localStorage)。在这方面,该规范似乎在内部不一致。

但是,以下内容可能不会满足您的要求:

localStorage.length = 2;
console.log(localStorage.length);

有趣的是,第一个是Chrome中的no-op,但与Firefox中的功能调用同义。第二个将始终记录中显示的键数localStorage

  • 对于首先支持网络存储的浏览器而言,这是正确的。(这几乎包括所有现代台式机和移动浏览器。)对于使用Cookie或其他技术模拟本地存储的环境,其行为取决于所使用的填充程序。localStorage可以在此处找到几种填充料。


 类似资料:
  • 我有一个关于Spring Security和Spring缓存的问题。假设我有一个方法,我已经用@PreAuthorize(“条件”)和@Cacheable(...)注释了这个方法,就像这样 @PreAuthorize(http://docs.spring.io/spring-security/site/docs/3.0.x/reference/ns-config.html)是否优先于@Cachea

  • 问题内容: 我已经了解了Java 和接口之间的区别。从Java 1.5开始,已将其他功能添加到接口,并已调用这些功能以保持向后兼容性。 我的问题是,现在我们有了接口,我们应该一直使用吗?不使用和使用的用例是什么? 问题答案: 两者都有其用途,并且都由java.util.concurrent中的Executor框架支持。Runnable已经存在了更长的时间,但是它仍然在使用并且不被阻止。 可调用程序

  • 我正在制作一个弹出窗口,我正在尝试显示基于cookie的弹出窗口,它只显示一次当用户第一次访问,也接受和拒绝按钮不工作的更多信息按钮弹出如下当我们点击更多信息新的弹出窗口也来我正在尝试隐藏接受,关闭和所有按钮和设置一个cookie显示这个弹出窗口 我用过这个但不起作用: null null

  • 问题内容: 我正在尝试使用HTML5功能。它可以使用IE8完成,但是当我尝试使用它时,却出现了JavaScript错误 所以我的问题是:IE8 可以直接使用吗?这是我的代码: 问题答案: 它确实支持,尽管您需要处于IE8模式(这在IE7模式下不起作用)。 要检查您是否在IE8模式下工作,请加载开发人员控制台。在顶部,确保已选择IE8模式。标准模式也不错。 您还需要确保的一件事是您正在使用HTML5

  • 问题内容: 在Java中,重载该方法会产生不良的说唱效果,尽管我不明白为什么。诸如此类的类在Java 8和Java 10中都使用它来确保被调用。但是,引入了Java 9 ,它使用PhantomReference机制而不是GC终结。起初,我认为这只是将终结处理添加到第三方类中的一种方法。但是,其javadoc中给出的示例显示了一个用例,可以很容易地用终结器重写。 是否应该按照Cleaner 重写所有

  • 问题内容: ZADD 的redis 文档指出操作为O(log N )。 但是,有人知道插入的元素位于排序顺序的开头还是结尾时,ZADD是否比O(log N )好? 例如,对于某些实现,这可能是O(1)。 具体来说,redis 教程指出: 排序集是通过包含跳过列表和哈希表的双端口数据结构实现的,因此,每次添加元素时,Redis都会执行O(log( N ))操作。 修改跳转列表以支持O( k )在开头