直接属性访问(localStorage.item
或localStorage['item']
)和使用功能接口(localStorage.getItem('item')
)都可以正常工作。两者都是标准的和跨浏览器兼容的。
存储对象上受支持的属性名称是与该对象相关联的列表中当前存在的每个键/值对的键,按照键最后一次添加到存储区域的顺序。
当找不到带有所请求名称的键/值对时,它们的行为就不同。例如,如果key 'item'
不存在,var a = localStorage.item;
将导致a
存在undefined
,而var a =localStorage.getItem('item');
将导致a
具有valuenull
。如您所知,undefined
并且null
在JavaScript / EcmaScript中不可互换。:)
功能接口是可靠地存储和检索等于的预定义属性的键下的值的唯一方法localStorage
。(有这六个:length
,key
,setItem
,getItem
,removeItem
,和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
。