大家好。有这段代码:
class User {
constructor(id, username, date){
this.id = id;
this.username = username;
this.date= date;
}
}
let myUsers = [
new User(1, 'Mark', new Date('03.01.2016')),
new User(2, 'Jacob', new Date('02.02.2016')),
new User(3, 'Petr', new Date('01.02.2016'))
];
我将此数组转换为 JSON 并将其存储在本地存储中。
localStorage.setItem('myUsers', JSON.stringify(myUsers));
然后我得到并解析
let users = localStorage.getItem('myUsers');
users = JSON.parse(users);
当我尝试输出格式化日期时
users.forEach(function(user){
console.log(user.date.getDate());
});
报错
Uncaught TypeError: user.date.getDate is not a function
据我了解,发生这种情况是因为在解析之后我得到了一个字符串,而不是一个带有日期的对象。其实就是这个问题。在这种情况下如何获得使用对象属性的机会?
JSON.stringify(myUsers)
将创建一个如下所示的 JSON 字符串:那些。每个对象都
User
将具有属性string
、number
、boolean
和。执行后,您将获得一个对象数组(不是),其中包含字段, , 。object
array
JSON.parse
Object
User
id
username
date
那些。需要一种方法来创建用户对象(反序列化之类的东西会起作用)
要仅“序列化”您需要的属性,您还可以编写一个
toJson
您已经在其中调用的方法JSON.stringify
在
JSON.parse()
第二个参数中,您可以传递一个将为每个键值对调用的函数:来源。
或者,如果您知道存储日期的属性的名称,您可以简单地检查
key
.同样,您可以将 JSON 解析的结果转换为您需要的任何对象。