当前位置: 首页 > 知识库问答 >
问题:

存储在本地存储中的数据丢失问题

费德宇
2023-03-14

我有一个令牌存储在localStore中,我也有一个方法来验证令牌是否正确,正如您在这段代码中看到的:

let token = localStorage.getItem('token');
console.log(token);

if ( !token )
{
    return null;
}

const parts = token.split('.');

if ( parts.length !== 3 )
{
    throw new Error('error');
}
....

如果令牌未定义我将返回null,否则继续验证。

有两个问题我不能理解:

  • 为什么我刷新页面时丢失了本地存储的令牌
  • 为什么if(!令牌)返回false当令牌未定义的时,第一个console.log返回未定义的,但我的方法继续const part=token.split ('.');

共有1个答案

龚永新
2023-03-14

本地存储只能使用字符串。

窗户。本地存储

使用localStorage存储的密钥和值始终采用UTF-16 DOMString格式,每个字符使用两个字节。与对象一样,整数键会自动转换为字符串。

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

因此,每个值都序列化为字符串。

localStorage.setItem('token', undefined);
let token = localStorage.getItem('token');
console.log(token);
console.log(typeof(token));

在控制台中打印:

undefined
string

结论:

  1. 不要将null未定义存储在本地存储中。
  2. 验证本地存储中的值时,始终将其视为字符串值。

注意事项:

  1. 默认情况下,验证应返回false。只有在成功的情况下,才会返回true
 类似资料:
  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • localStorage 本地存储 存储针对QQ帐号隔离 数据存储于本地文件中。游戏结束后不会被删除 函数 key( index) 获取对应索引的key 手q 版本7.8.5 参数 参数名 类型 说明 index number 索引值 返回值 类型 说明 string 说明 示例 var stringKey = BK.localStorage.key(0); getItem( key) 获取ke

  • 主要内容:程序员的幽默计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。

  • 我使用prestodb和hive metastore作为模式存储,使用alluxio缓存作为数据的外部存储。alluxio和hive模式中使用的存储格式是PARQUET。同时使用配置单元目录从presto检索时间戳字段。我会跟踪错误。 列 utdate 声明为类型时间戳,但 Parquet 文件将列声明为 INT64 类型 数据集的架构为 创建表测试( utcdate timestamp ) WI

  • 问题内容: 除了是非持久性的并且仅限于当前窗口之外,会话存储与本地存储相比是否还有其他好处(性能,数据访问等)? 问题答案: localStorage和sessionStorage都扩展了Storage。除了的预期的“非持久性”外,它们之间没有区别。 也就是说,存储在中的数据将 一直保留到明确删除为止 。所做的更改将被保存,并且可用于当前和将来对该站点的所有访问。 对于, 更改仅在每个选项卡上可用