繁体   English   中英

为什么null在localStorage中存储为字符串?

[英]Why is null stored as a string in localStorage?

在Chrome控制台中,我将foo设置为null:

localStorage.setItem("foo",null)

然后我测试,是否为null:

console.log(localStorage.getItem("foo")==null)

打印false

然后我测试,是否是字符串"null"

console.log(localStorage.getItem("foo")=="null")

打印true

我认为null是一个合法的Javascript值。 将它作为字符串"null"存储是非常反直觉的,当我在浏览器中手动清除localStorage时,在其他工作程序中引起了一个奇怪的错误。

请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

所有值都作为字符串存储在本地存储中。 您应该在存储数据之前对数据进行字符串化,并在检索数据后对其进行解析:

localStorage.setItem("foo", JSON.stringify(null));
var value = JSON.parse(localStorage.getItem("foo"));
console.log(value === null);

根据规范localstorage使用Storage对象接口

interface Storage {
  readonly attribute unsigned long length;
  DOMString? key(unsigned long index);
  getter DOMString? getItem(DOMString key);
  setter void setItem(DOMString key, DOMString value); //notice this line
  deleter void removeItem(DOMString key);
  void clear();
};

setter方法转换为setItem ,只接受DOMString

根据文件

DOMString是一个UTF-16字符串。 由于JavaScript已经使用了这样的字符串,因此DOMString直接映射到String。

将null传递给接受DOMString的方法或参数通常会字符串化为“null”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM