什么是序列化和反序列化?
序列化(Serialization)是将数据结构或对象状态转换为一个可以存储或传输的格式的过程。这意味着我们可以将复杂的数据结构转换为简单的字节流或字符串,以便于存储或传输。反序列化(Deserialization)则是将这些数据恢复为其原始形式的过程。
序列化
某个内存中的对象,如JSON对象,需要保存在硬盘中,最终需要采用字符串/字节的结构
注:此处由存储决定的,存储最终为字节,但为了可读性,又抽象出了字符
localStorage.setItem("a",{a:1}) // 获取的数据不对
localStorage.setItem("a",JSON.stringify({a:1})) // 需要将其转换为字符
在上面的操作中,JSON.stringify的这个操作即为序列化
反序列化
同样的,将某段接收到的字符/字节,转换为内存中可操作的对象,即为反序列化
localStorage.getItem("a").a // '{"a":1}'['a'] --> 字符串
JSON.parse(localStorage.getItem("a")).a // {"a":1}['a'] --> 对象
JSON.parse就是反序列化
小结
后端返回的JSON数据,我们获取到的数据是基于字符的[可传输,可存储
],然后通过JSON.parse转换为JSON对象[可操作,可读取
]
同样,当我们将JSON数据传送给后端时,也会经历一步JSON.stringify,用于将对象转换为可传输,可存储
的结构
提他干嘛
渲染流水线中,获取到的数据是基于http协议的,内容组成是由html,css,js三部分组成,但只是字符串,首先要做的就是将他们进行反序列化,这些反序列化的操作,通常都被称为Parse
思考题
在前端如何把一个对象进行存储?我说的是包含继承,封装的那种存储
给个提示,任意某个element,明明可以ele instaceOf Eelement
,为什么还有个属性ele.nodeType === 1