gpt4 book ai didi

javascript - 本地存储 : Storing Objects vs Simple Data Types in different ways?

转载 作者:行者123 更新时间:2023-12-03 12:28:02 24 4
gpt4 key购买 nike

我已经了解了使用 JSON.stringify 和 JSON.parse 从 HTML5 localStorage 存储和检索值/对象的方法。 它有效,但它“字符串化”了所有内容 - 包括字符串、数字等。我想改进它。我想避免“字符串化”不是对象的简单数据类型。我有一个下面的方法,用于确定参数是否是对象,如果是对象则对其进行 JSON.stringify。

lsSet: function(key, value) {

((Object.prototype.toString.call(value) === '[object Object]'))
? localStorage.setItem(key,JSON.stringify(value))
: localStorage.setItem(key,value);
return (localStorage.getItem(key)) ? true : false;
},

是否有一个好方法来识别您正在检索的 localStorage 字符串是否是字符串化对象?我正在考虑检查字符串是否以 { 开头并以 } 结尾,但似乎必须有更好的方法。下面是我当前的 localStorage get 方法,但在尝试 JSON.parse 简单数据类型(例如字符串)时抛出错误。

lsGet: function(key) {
return JSON.parse(localStorage.getItem(key));
},

典型的控制台错误是由于 JSON.parse 引起的:

Uncaught SyntaxError: Unexpected token E 

有什么想法吗?我突然想到一个想法,也许只是尝试一下?

var value;
try {
value = JSON.parse(localStorage.getItem(key));
} catch(err) {
value = localStorage.getItem(key);
}
return value;

编辑:注意,我正在处理很多不同的数据,我真的不想担心我正在设置/获取的数据类型。这样就创建了标准的 lsSet/lsGet 方法。在我的应用程序中,数据存储在 PHP Session、JavaScript 对象和 localStorage 中 - 有点混合。

最佳答案

没有办法知道您检索的字符串是序列化对象还是纯字符串,除非基于您自己的规则。字符串 "null""34""[1,2,3]" 都可以是有效字符串或有效 JSON,并且除非您知道预期内容,否则无法确定。

所以我建议:

  • 序列化和反序列化所有内容。这在性能方面应该不会太差,除非您以非常高的频率执行此操作(在这种情况下,localStorage 可能是错误的选择)。

或者

  • 向序列化字符串添加自定义“ header ”,例如“JSON:{...}”。然后,当您检索字符串时,检查 header 并进行相应处理。

关于javascript - 本地存储 : Storing Objects vs Simple Data Types in different ways?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com