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

8
在Chrome控制台中,我将foo设置为null:
localStorage.setItem("foo",null)

然后我测试一下,它是否为空:

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

打印结果为false

接下来我测试的是字符串"null"

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

打印出true

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


2
你只能在localStorage中存储字符串。 - Tushar
2个回答

17
请查看https://developer.mozilla.org/zh-CN/docs/Web/API/Window/localStorage
本地存储中的所有值都以字符串形式存储。在存储数据之前应将其转换为字符串,在检索数据后应进行解析:
localStorage.setItem("foo", JSON.stringify(null));
var value = JSON.parse(localStorage.getItem("foo"));
console.log(value === null);

5
根据规范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直接映射到字符串。

将null传递给接受DOMString的方法或参数通常会转换为"null"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接