在尚未设置商品时,使用JSON.parse(localStorage.item)和JSON.parse(localStorage['item'])无法返回NULL。
JSON.parse(localStorage.item)
JSON.parse(localStorage['item'])
NULL
但是,JSON.parse(localStorage.getItem('item')确实可行。事实证明,这JSON.parse(localStorage.testObject || null)也是可行的。
JSON.parse(localStorage.getItem('item')
JSON.parse(localStorage.testObject || null)
一位评论基本上说,localStorage.getItem()并localStorage.setItem()应始终优先考虑:
localStorage.getItem()
localStorage.setItem()
getter和setter提供了一致,标准化和跨浏览器兼容的方式来使用LS api,并且始终应优先于其他方式。
我喜欢对localStorage使用速记点和方括号表示法,但是我很好奇知道其他人对此的看法。localStorage.getItem(’item’)是否比localStorage.item或localStorage更好,或者只要它们可以使用速记符号就可以吗?
直接属性访问(localStorage.item或localStorage['item'])和使用功能接口(localStorage.getItem('item'))都可以正常工作。两者都是标准的和跨浏览器兼容的。
localStorage.item
localStorage['item']
localStorage.getItem('item')
存储对象上受支持的属性名称是与该对象相关联的列表中当前存在的每个键/值对的键,按照键最后一次添加到存储区域的顺序。
当找不到带有所请求名称的键/值对时,它们的行为就不同。例如,如果key 'item'不存在,var a = localStorage.item;将导致a存在undefined,而var a =localStorage.getItem('item');将导致a具有value null。如您所知,undefined并且null在JavaScript / EcmaScript中不可互换。:)
'item'
var a = localStorage.item;
a
undefined
var a =localStorage.getItem('item');
null
编辑: 功能接口是可靠地存储和检索等于的预定义属性的键下的值的唯一方法localStorage。(有这六个:length,key,setItem,getItem,removeItem,和clear。)所以,举例来说,下面将始终工作:
localStorage
length
key
setItem
getItem
removeItem
clear
localStorage.setItem('length', 2); console.log(localStorage.getItem('length'));
请特别注意,第一个语句不会影响物业localStorage.length(如果没有按键,除了可能增加它'length'已经localStorage)。在这方面,该规范似乎在内部不一致。
localStorage.length
'length'
但是,以下内容可能不会满足您的要求:
localStorage.length = 2; console.log(localStorage.length);
有趣的是,第一个是Chrome中的no-op,但与Firefox中的功能调用同义。第二个将始终记录中显示的键数localStorage。