【问题标题】:Why is null stored as a string in localStorage?为什么 null 在 localStorage 中存储为字符串?
【发布时间】:2018-04-19 10:24:22
【问题描述】:

在 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 值。当我手动清除浏览器中的 localStorage 时,将其存储为字符串 "null" 非常反直觉,并在原本可以正常工作的程序中导致了一个奇怪的错误。

【问题讨论】:

  • 您只能将字符串存储在localStorage中。

标签: javascript null local-storage


【解决方案1】:

请看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);

【讨论】:

    【解决方案2】:

    根据speclocalstorage 使用存储对象接口

    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

    根据documentation

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      相关资源
      最近更新 更多