存入localStorage的用户Token是否必须为字符串?——MERNG栈课程实操疑问
localStorage存储数据:必须转为字符串吗?
嘿,这个问题抓得很准!先把最核心的结论摆出来:localStorage只能存储字符串类型的数据——这可不是什么“行业最佳实践”,而是浏览器这个API的硬性规则,没得商量。
你说课程里直接把Token存进localStorage没用到JSON.stringify(),这其实很合理,因为咱们常用的用户Token(比如JWT)本身就是一串字符串啊!这种情况下,直接存完全没问题,多套一层JSON.stringify()反而画蛇添足,读取的时候还得额外JSON.parse()去掉多余的引号,纯纯没必要。
那什么时候必须转字符串呢?分两种情况说:
- 当你要存的是非字符串类型的数据(比如对象、数组、数字、布尔值):这时候必须用
JSON.stringify()转成JSON字符串。举个例子,要是直接存{username: "diego"},localStorage会自动调用它的toString()方法,最后存进去的是"[object Object]",完全没法还原成原来的对象;但用JSON.stringify()转完是"{"username":"diego"}",之后用JSON.parse()就能完美还原成原对象。 - 当你要存的本身就是字符串:直接存就好,不需要额外转换。比如你的Token、用户昵称这类天然的字符串,直接丢进localStorage就行。
额外提个小细节:哪怕你存的是数字(比如123)或者布尔值(比如true),直接存的话也会被自动转成字符串"123"、"true"。如果之后需要用原类型的数据,你还得手动转回来,不如一开始就用JSON.stringify()统一处理,读取时用JSON.parse()还原,逻辑更清晰也不容易出错。
内容的提问来源于stack exchange,提问作者Diego Davincci
相关产品推荐
相关产品推荐

