为什么localStorage [“...”]未定义,但localStorage.getItem(“...”)为空?

时间:2015-04-08 15:51:47

标签: javascript null local-storage undefined

上次检查时,以下两行返回true

null == localStorage["foo"];
null == localStorage.getItem("foo");

使用null替换undefined时同样适用。 所以第一个问题是,为什么有两种方法可以解决localStorage问题?为什么

localStorage["foo"]

时返回undefined
localStorage.getItem("foo")

返回null

开发JS时我需要注意这个吗?

3 个答案:

答案 0 :(得分:6)

.getItem() null为未知密钥返回.getItem()

但请注意,.setItem()getter在IDL中明确定义为setter接口的指定Storage[],因此它们还完全支持访问存储内容的方式。

但是undefined语法更类似于普通对象和/或数组属性getter,就像那些返回[]未知属性名称一样。

使用localStorage语法的原因是它首先对对象属性进行操作,并且非常乐意允许您覆盖> localStorage['getItem'] = function() { return 0 } > localStorage.getItem('getItem') 0 对象的实际属性和方法,cf:

{{1}}

答案 1 :(得分:2)

localStorage["..."]是localstorage的无效用法。您正在尝试访问localstorage对象的方法,而不是访问实际的数据库。

你必须使用

localStorage.getItem("...")

localStorage.setItem("...")

访问存储数据库的方法。

答案 2 :(得分:1)

在javascript中,您始终会获得对象内不存在的键的undefined值。

a = {}; //new object
alert(a["test"]); // you get 'undefined' because "test" keys is not found

在localStorage中.getItem是一个检查localStorage对象内部键的方法,如果找不到则返回null

不要责怪javascript,它只是localStorage对象行为