【localstorage问题记录】复杂数据存储方式

问题记录

对于localstorage对new Map()的数据存储 数据持久化的核心原理JavaScript 特定数据结构的处理

const hasList = ref(new Map());
//存储数据
const saveToLocalStorage = () => {
   
   
  localStorage.setItem(
    'hasList',
    JSON.stringify(Array.from(hasList.value.entries()))
};
//获取数据
const loadFromLocalStorage = () => {
   
   
  //最初获取时,数据可能为空
  const saved = JSON.parse(localStorage.getItem('hasList')) || []; 
  //还原数据类型
  this.hasList= new Map(saved);
 }

一、为什么不能直接存储 Map 迭代器?

1. 迭代器的本质

const map = new Map([['a', 1], ['b', 2]]);
const iter = map.entries();

console.log(iter); // MapIterator { ['a', 1], ['b', 2] }
  • 迭代器是临时对象:它是对原始数据的「动态视图」,不是数据本身
  • 不可序列化JSON.stringify(iter) 会得到 {}(丢失所有数据)
  • 一次性消费:迭代器遍历后就会耗尽(如发电机发完电就空了)

2. localStorage 的限制

  • 只能存储字符串(通过 JSON.stringify 转换)
  • 无法存储函数、迭代器、Map/Set 等特殊对象

二、为什么需要 Array.from + new Map 转换?

数据流转过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值