在Chrome扩展程序中,我试图将Date对象保存到存储中,然后将其读回。根据{{3}}
类型为“对象”和“功能”的值通常会序列化 到{},但Array(按预期序列化),Date和 正则表达式(使用其String表示序列化)。
我要另存为:
var value= new Date(Date.now());
chrome.storage.sync.set({"testdate":value}, function(){
console.log("saved testdate to storage:");
console.log(value);
});
记录该值的输出为
2018年10月16日星期二08:22:11 GMT-0700(太平洋夏令时间)
我稍后将从存储中检索为:
chrome.storage.sync.get("testdate", function(items){
console.log("test date from storage:");
console.log(items.testdate);
});
在这种情况下,logging items.testdate的值为:
对象 proto :构造函数:Object()hasOwnProperty:ƒhasOwnProperty()isPrototypeOf:ƒisPrototypeOf()propertyIsEnumerable:ƒ propertyIsEnumerable()toLocaleString:ƒtoLocaleString()toString:ƒ toString()valueOf:ƒvalueOf() defineGetter :ƒ defineGetter () defineSetter :ƒ defineSetter () lookupGetter :ƒ lookupGetter () lookupSetter :ƒ lookupSetter ()获得 proto :ƒ proto ()设置 proto :ƒ proto ()
无法弄清楚如何找回我的Date对象(或将字符串表示形式转换回Date)
答案 0 :(得分:0)
epsilon
const currentTime = (new Date()).toJSON();
const items = { 'testdate': currentTime };
chrome.storage.local.set(items, () => {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError.message);
}
});
我的代码基于Date.prototype.toJSON,
chrome.storage.local.get(['testdate'], (result) => { if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); } else { const storedJSONDate = result['testdate']; const testdate = new Date(storedJSONDate); console.log(testdate); } });
从Chrome存储空间official documentation,我认为这是因为Date无法按预期进行序列化。因为它指定了Array和Regex序列化的方式,而不指定Date序列化的方式,所以我认为它序列化为var jsonDate = (new Date()).toJSON();
var backToDate = new Date(jsonDate);
console.log(jsonDate); //2015-10-26T07:46:36.611Z
,这是我不包括{}
部分时得到的。
提供每个键/值对用于更新存储的对象。存储中的任何其他键/值对均不会受到影响。 诸如数字之类的原始值将按预期进行序列化。类型为“ object”和“ function”的值通常会序列化为{},但Array(按预期序列化),Date和Regex(使用其String表示序列化)除外。