【发布时间】:2022-01-23 18:32:54
【问题描述】:
我正在构建一个带有同步待办事项列表的日历。我正在尝试根据用户输入将特定日期保存到本地存储。目前,待办事项已保存到本地存储,并显示在带有文本的待办事项列表和日历中,但如果我刷新页面,日历中的待办事项就会消失。
在本地存储中写入值:[object HTMLInputElement]
function saveTodosToLS() {
const todosAsString = JSON.stringify(todos);
localStorage.setItem("todos", todosAsString);
}
function loadTodos() {
const todosAsString = localStorage.getItem('todos');
todos = JSON.parse(todosAsString || '[]');
}
这是我苦苦挣扎的部分
function saveCalendarToLS() {
const todoDateAsString = Date.parse('dateOfTodos');
todoDateAsString = JSON.stringify(dateOfTodos);
localStorage.setItem('dateOfTodos', todoDateAsString);
}
function loadTodosInLS() {
const todoDateAsString = localStorage.getItem('dateOfTodos');
dateOfTodos = Date.parse(todoDateAsString || '[]');
}
【问题讨论】:
-
Date.parse('dateOfTodos')是什么意思 -
@MirandaNilhag JSON 可以对数字进行字符串化。根据我的经验,将 JavaScript
Date对象序列化为 JSON 的最可靠方法是仅保存Date的内部 Unix 时间戳(来自getTime()),然后使用Date(number)构造函数重新水化。 -
您不能将 DOM 元素对象(如
HTMLInputElement)传递给localStorage。你只能传递“POJO”对象(Plain Ol' JavaScript Objects)。 -
我认为你应该更新那部分 JSON.stringify(todoDateAsString);
-
编程时经常做的一件有用的事情是在出现问题时查看中间结果。在这种情况下,在浏览器控制台中运行
Date.parse('dateOfTodos');,并在运行问题中的代码后查看本地存储值的值可能会提供信息。