我想将localStorage项目设置为函数,但是当我这样做时会将其保存为字符串。
localStorage.getData = function (key="def") {
let data = null;
if (this[key] && !_this.isDataAvailableInList(this[key])) {
data = this[key].data;
}
return data;
};
上述函数存储为字符串而不是函数。
注意:请不要提供替代方案或其他建议,我很清楚备选方案,并且很想知道它是如何工作的。我没有提供整个上下文所以我们假设我需要将localStorage项目设置为函数
答案 0 :(得分:2)
不幸的是,本地存储只是关于字符串。甚至数组或其他数据也总是转换为字符串。
对于没有周期的大多数死数据,您当然可以使用JSON.stringify
和JSON.parse
,但在其他情况下或者使用JSON不支持的代码或其他Javascript实体(例如Infinity
或{{ 1}})你需要自己序列化和反序列化。
Javascript提供undefined
,因此您可以将函数eval
存储为首先将其转换为f
的字符串,然后使用f+""
取回函数。
但是这不能用于闭包,而且你甚至无法知道函数是否确实是Javascript中的闭包(如果尝试序列化闭包的不可能的操作,你甚至不能引发错误。)
答案 1 :(得分:1)
通过.toString()
将函数转换为字符串。阅读时,请通过new Function(myString)
将其转换回函数。
示例:
没有pamameters:
(new Function('var a = 0; return a + 1;'))() === 1
带参数:
(new Function(['param0'],'var a = param0; return a + 1;'))(100) === 101
注意:原始功能的范围将丢失。