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

Why is localStorage["..."] undefined, but localStorage.getItem("...") is null?

我上次检查时,以下两行 returned true:

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

null 替换为 undefined 时同样适用。 那么第一个问题是,为什么有两种方式来寻址localStorage?为什么

localStorage["foo"]

return undefined

localStorage.getItem("foo")

returns null?

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

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

你必须使用

localStorage.getItem("...")

localStorage.setItem("...")

访问存储数据库的方法。

Web Storage Specification requires.getItem() returns null 为未知密钥。

但是请注意,.getItem().setItem() 在 IDL 中专门定义为 Storage 接口的指定 gettersetter,并且因此,它们也完全支持访问存储内容的方式。

但是 [] 语法更类似于普通对象 and/or 数组 属性 getter,就像那些 returns undefined对于未知的 属性 名称。

使用[]语法的原因是它将首先对对象属性进行操作,并且很乐意允许您覆盖[的真实属性和方法。 =21=] 对象,c.f:

> localStorage['getItem'] = function() { return 0 }
> localStorage.getItem('getItem')
0

在 javascript 中,对于对象中不存在的键,您总是会得到一个 undefined 值。

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

在 localStorage 中 .getItem 是一种检查 localStorage 对象内部键的方法,returns null 如果找不到。

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