一尘不染

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

javascript

在尚未设置商品时,使用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更好,或者只要它们可以使用速记符号就可以吗?


阅读 536

收藏
2020-05-01

共1个答案

一尘不染

直接属性访问(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可以在此处找到几种填充料。
2020-05-01