在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时,在其他工作程序中引起了一个奇怪的错误。
答案 0 :(得分:7)
请参阅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);
答案 1 :(得分:3)
根据spec,localstorage
使用存储对象界面
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"。